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
;