Delphi/C++Builder - Bitmapから透過Iconを生成
Bitmap から透過する色を指定して、Iconを作成
同じサイズのマスク用Bitmap(下ではMaskBmp)を作成して、透過する場所は白、元のBitmapを表示する場所は黒で塗りつぶしておく
IconInfo を通じて、CreateIconIndirect へ元のBitmapとマスク用Bitmapを渡し、Iconへコピーさせる
※元Bitmapの TransparentColorプロパティを利用しようとしたが、設定した値が得られなかったので別引数とした
同じサイズのマスク用Bitmap(下ではMaskBmp)を作成して、透過する場所は白、元のBitmapを表示する場所は黒で塗りつぶしておく
IconInfo を通じて、CreateIconIndirect へ元のBitmapとマスク用Bitmapを渡し、Iconへコピーさせる
※元Bitmapの TransparentColorプロパティを利用しようとしたが、設定した値が得られなかったので別引数とした
procedure CopyIconFromTransBitmap(ABitmap: TBitmap; ATransparentColor: TColor; ADstIcon: TIcon);
var
MaskBmp: TBitmap;
IconInfo: TICONINFO;
X, Y: Integer;
begin
MaskBmp := TBitmap.Create;
try
MaskBmp.Assign(ABitmap);
for X := MaskBmp.Width -1 downto 0 do begin
for Y := MaskBmp.Height -1 downto 0 do begin
if (MaskBmp.Canvas.Pixels[X, Y] = ATransparentColor) then begin
MaskBmp.Canvas.Pixels[X, Y] := clWhite;
end else begin
MaskBmp.Canvas.Pixels[X, Y] := clBlack;
end;
end;
end;
with IconInfo do begin
fIcon := True;
xHotspot := 0;
yHotspot := 0;
hbmMask := MaskBmp.Handle;
hbmColor := ABitmap.Handle;
end;
ADstIcon.Handle := CreateIconIndirect(IconINFO);
finally
MaskBmp.Free;
end;
end;
コメント