![]() |
|
#2
|
|||
|
|||
![]() Переписал, оказывается не все так сложно как показалось
![]() Не уверен что код оптимизирован, однако GetTickCount возвращает "15" для bmp 640*480 24bpp, SkyLine не далеко ушел - "16", что не может не радовать. Кстати, фильтр интересный довольно-таки, что-то вроде монохромного дизеринга. Код под FastDib: Код:
procedure Mono(Bmp:TFastDIB;Split:Integer); var x,y,k: Integer; Lin1: PLine24; pc: PFColor; begin for y:=0 to Bmp.AbsHeight-1 do begin Lin1:=Bmp.Scanlines[y]; for x:=0 to Bmp.Width-1 do begin k:=(76*Lin1[x].r+150*lin1[x].g+30*lin1[x].b) div 256; if k < Split then k:=0 else k:=255; Lin1[x].r:=k; Lin1[x].g:=k; Lin1[x].b:=k; end; end; end; |