05.08.2010, 19:46
|
|
Let Me Show You
|
|
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
|
|
еще один из способов обработки TBitmap. заменяет околобелый цвет на clBtnFace:
Код:
procedure Transparent(bmp: TBitmap);
var
InfoHeaderSize: DWORD;
ImageSize: DWORD;
BitmapInfo: PBitmapInfo;
Bits: array of Byte;
i: Integer;
dc: HDC;
r, g, b: Integer;
r0, g0, b0: Integer;
delta: Integer;
begin
delta:=4;
r0:=GetRValue(ColorToRGB(clBtnFace));
g0:=GetGValue(ColorToRGB(clBtnFace));
b0:=GetBValue(ColorToRGB(clBtnFace));
GetDIBSizes(bmp.Handle, InfoHeaderSize, ImageSize);
GetMem(BitmapInfo, InfoHeaderSize);
GetMem(Bits, ImageSize);
dc:=CreateCompatibleDC(GetDC(0));
try
GetDIB(bmp.Handle, 0, BitmapInfo^, Bits[0]);
for i:=0 to (ImageSize div 3)-1 do
begin
r:=Bits[(i*3)+2];
g:=Bits[(i*3)+1];
b:=Bits[(i*3)+0];
if (Abs(r-255)<=delta) and (Abs(g-255)<=delta) and (Abs(b-255)<=delta) then
begin
Bits[(i*3)+0]:=r0;
Bits[(i*3)+1]:=g0;
Bits[(i*3)+2]:=b0;
end;
end;
SetDIBits(dc, bmp.Handle, 0, BitmapInfo^.bmiHeader.biHeight, Bits, BitmapInfo^, DIB_RGB_COLORS);
finally
DeleteDC(dc);
ReleaseDC(0, dc);
FreeMem(BitmapInfo);
FreeMem(Bits);
end;
end;
|