Вверх ↑
Этот топик читают: Гость
Ответов: 4621
Рейтинг: 746
#31: 2015-10-09 11:45:35 ЛС | профиль | цитата
3042 писал(а):
1. Правильно ли организовал функцию GetSrc? Т.е. не будет ли такого, что обращаются к несозданному объекту (картинке) или, наоборот, утечки памяти?

1. Используй var - избежишь лишнего копирования TData.
THIJanFX.GetSrc(var _Data:TData; needDest:boolean):boolean;

Да и, кажется, в твоем варианте значение из потока будет подаваться на обе точки Bitmap, Bitmap2. Функцию
THIJanFX.GetSrc(_Data,_Data2:TData; needDest:boolean):boolean;
можно сделать как
THIJanFX.GetSrc2(var _Data: TData; needDest: boolean): boolean;


2. Вместо кучи ReadData/_IsBitmap/ToBitmap используй ReadBitmap

#pas
var
Bmp: PBitmap;
begin
Bmp := ReadBitmap(_Data, _data_Bitmap);
if Bmp <> nil then
begin
........
end;
end;
3042 писал(а):
правильно ли то, что Fsrc после выдачи на событие не разрушается ф-цией Free_And_Nil?
Либо уничтожать сразу после события, либо никогда не уничтожать и в деструкторе проверять Fsrc, Fdst на nil, если не равны - уничтожить.

THIJanFX._work_doSolarize и в других местах писал(а):
Fsrc.Free;
Fdst.Free;
А где присвоение nil? После этого функции GetSrc выдадут ошибку.

карма: 26

1
Голосовали:3042
Ответов: 1304
Рейтинг: 405
#32: 2015-10-09 21:26:30 ЛС | профиль | цитата
3042, поправил сылки.
16b - это не на канал, а на пиксель

Это уже начитавшись на форумах стал так выражатся , а по сути это размерность пикселя в канале цвета или альфы.
Кстати уничтожаю объект в деструкторе, посмотри как организовано всё в hiResize.
Netspirit, хотел спросить по случаю что за метод Bitmap.Empty

карма: 3

0
Ответов: 1925
Рейтинг: 172
#33: 2015-10-09 22:46:47 ЛС | профиль | цитата
MAV писал(а):
что за метод Bitmap.Empty

Книга о KOL писал(а):
Empty - проверяет, является ли изображение пустым (изображение пустое, если его ширина или высота равна нулю);

http://kolmck.net/docs/KOLbook_RU.htm#_Toc275865541
------------ Дoбавленo в 22.30:
По поводу битности png - сам не понимаю, потому отсылаю к знатокам. Может, дело в компоненте PNG.
------------ Дoбавленo в 22.46:
Netspirit, подправил компонент и упомянул в авторах.
карма: 9
1
Голосовали:MAV
Ответов: 1304
Рейтинг: 405
#34: 2015-10-09 22:50:50 ЛС | профиль | цитата
3042 писал(а):
Может, дело в компоненте PNG

3042, вот в нём то я сейчас и зарылся, и по всей видимости без сторонней библеотеки 16b оттенков серого мне не видать.
щас посмотрим на компонент из будущего (Версия 2.1 от 10.10.2015) я конечно понимаю про часовые пояса но всё равно прикольно
карма: 3

0
Ответов: 1925
Рейтинг: 172
#35: 2017-07-11 13:38:52 ЛС | профиль | цитата
Добавил эффект текстуризации отражением. Скачать обновление можно во вложении и в первом посте.
карма: 9
1
Голосовали:Konst
Ответов: 1925
Рейтинг: 172
#36: 2017-07-19 15:27:34 ЛС | профиль | цитата
Обновил, теперь новая функция экономнее расходует память.
карма: 9
0
файлы: 1JanFX.rar [22.7KB] [683]
Ответов: 632
Рейтинг: 4
#37: 2017-07-24 15:10:58 ЛС | профиль | цитата
30247, ОГРОМНОЕ СПАСИБО!!!
карма: 0

0
Ответов: 497
Рейтинг: 16
#38: 2017-07-24 18:30:30 ЛС | профиль | цитата
Vadimluk1 писал(а):
30247


--- Добавлено в 2017-07-24 18:31:10

3042, это не тебе спасибо а старшему брату

Редактировалось 1 раз(а), последний 2017-07-24 18:31:10
карма: 1
        ]  
0
Ответов: 632
Рейтинг: 4
#39: 2017-07-25 01:22:07 ЛС | профиль | цитата
RAWY_EX, кто тут старший брат?
карма: 0

0
Ответов: 632
Рейтинг: 4
#40: 2018-07-31 18:07:34 ЛС | профиль | цитата
3042, Здравствуйте, Вы можете добавить эффект "Ограничить количество цветов картинки, дизеринг"(позволяет уменьшить количество цветов точно до указанного количества. Ещё этот эффект называют дизерингом, который используется для создания иллюзии глубины цвета при ограниченном количестве цветов. Проще говоря это выглядит как рассеивающиеся точки одно и того же цвета для создания плавности переходов между разными оттенками цветной картинки при том, что количество цветов сильно ограничено. )
карма: 0

0
Ответов: 1925
Рейтинг: 172
#41: 2018-07-31 20:55:49 ЛС | профиль | цитата
Vadimluk1, а метод doConvertTo16bit не подходит? ограничивает до 16 бит (65536 цветов).
карма: 9
0
Ответов: 632
Рейтинг: 4
#42: 2018-08-03 01:20:46 ЛС | профиль | цитата
3042 писал(а):
Vadimluk1, а метод doConvertTo16bit не подходит? ограничивает до 16 бит (65536 цветов).

Было бы не плохо ограничить цвета до минимума, насколько возможно до 200 хотя бы.
карма: 0

0
Ответов: 1925
Рейтинг: 172
#43: 2018-08-03 11:56:11 ЛС | профиль | цитата
Add(Image,2763176,301,266)
{
Left=20
Top=35
Width=260
Height=205
AutoSize=0
Point(doRefresh)
link(onClick,14633685:doData,[])
}
Add(InlineCode,14654515,462,266)
{
WorkPoints=#4:doDs|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|20: onRes:THI_Event;|0:|45: procedure doDs(var dt:TData; index:word);|0:|5: end;|0:|14:implementation|0:|27:procedure THiAsmClass.doDs;|17:var Clip:PBitmap;|5:begin|22: Clip := ToBitmap(dt);|103: Clip.PixelFormat:=pf8bit; //Можно pf1bit, pf4bit, pf8bit, pf15bit, pf16bit, pf24bit, pf32bit, pfCustom|1: |36: //Ниже - просто мои эксперименты :)|44: //msgbox(int2str(Clip.DIBPalEntries[3]),0);|27: //_hi_OnEvent(onRes,Clip);|4:end;|0:|4:end.|
}
Add(DoData,14633685,350,266)
{
link(onEventData,6020300:doEvent1,[])
link(Data,6633695:Var3,[(356,254)(332,254)(332,313)])
}
Add(Hub,6020300,406,266)
{
link(onEvent1,14654515:doDs,[])
link(onEvent2,2763176:doRefresh,[(432,279)(432,244)(284,244)(284,286)])
}
Add(PictureStream,13298081,294,350)
{
Quality=90
link(onLoad,1729089:In,[])
link(Bitmap,6633695:Var2,[])
}
Add(GetDataEx,6633695,301,308)
{
link(Data,2763176:ImageBitmap,[])
}
Add(Button,16408695,231,357)
{
Left=75
Top=5
Caption="сохр"
Data=String(C:\\test.bmp)
link(onClick,13298081:doSave,[])
}
Add(Button,14948470,119,343)
{
Left=20
Top=5
Caption="откр"
Data=String(C:\\test.bmp)
link(onClick,4893013:doExecute,[])
}
Add(ODialog,4893013,168,343)
{
link(onExecute,13298081:doLoad,[(247,349)(247,356)])
}
Add(LineBreak,11519428,231,266)
{
link(Out,2763176:doLoad,[])
Primary=[1729089,112,84]
}

В общем, формат пикселей задаёт кол-во цветов (в InlineCode). pf8bit - 256 цветов, pf1bit - 2 цвета и т. д. Там написано, что можно подставлять. pf24bit - обычная RGB картинка по 8 бит на канал. А вообще, в KOL.pas всё это есть.

Но только вот при сохранении в jpg это не учитывается, и размер не уменьшается с кол-вом цветов. При сохр. в bmp - учитывается.

Подходит?

Редактировалось 1 раз(а), последний 2018-08-03 11:56:37
карма: 9
0
43
Сообщение
...
Прикрепленные файлы
(файлы не залиты)