Хм... статейку нашёл, но ничего толком "вмонтировать" не удалось.
Зато, нашёл код с использованием 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;
по изображению после обработки идут вертикальные полосы...