Показать сообщение отдельно
  #7  
Старый 26.07.2010, 22:18
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Хм... статейку нашёл, но ничего толком "вмонтировать" не удалось.
Зато, нашёл код с использованием ScanLine. После преобразования:
Код:
procedure ParseBg(bmp: TBitmap);
type
  pRGBArray = ^TRGBArray;
  TRGBArray = array[0..0] of TRGBTriple;
var
  x, y, sx, sy: integer;
  r,g,b: Byte;
  screenb:TBitmap;
  line1,line2: pRGBArray;
begin
  screenb := TBitmap.Create;
  screenb.Width := bmp.Width;
  screenb.Height := bmp.Height;
  sx:=(screen.Width-bmp.Width)div 2;
  sy:=(screen.Height-bmp.Height)div 2;
  BitBlt(screenb.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, GetDC(0), sx, sy, SRCCOPY);
  for y:=0 to bmp.Height-1 do begin
    line1 := bmp.ScanLine[y];
    line2 := screenb.ScanLine[y];
    for x:=0 to bmp.Width-1 do begin
      with line1^[x] do begin
        r:=rgbtRed;
        g:=rgbtGreen;
        b:=rgbtBlue;
      end;
      if (r=g)and(g=b)and(r<255) then begin
        with line2^[x] do begin
          r:=r*rgbtRed shr 8;
          g:=g*rgbtGreen shr 8;
          b:=b*rgbtBlue shr 8;
        end;
        with line1^[x] do begin
          rgbtRed:=r;
          rgbtGreen:=g;
          rgbtBlue:=b;
        end;
      end;
    end;
  end;
  screenb.Free;
end;
по изображению после обработки идут вертикальные полосы...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием