Тема: FastDib
Показать сообщение отдельно
  #2  
Старый 16.12.2011, 10:29
medvedoff medvedoff вне форума
Прохожий
 
Регистрация: 27.01.2011
Сообщения: 10
Репутация: 10
По умолчанию

Переписал, оказывается не все так сложно как показалось
Не уверен что код оптимизирован, однако 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;
Ответить с цитированием