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;
コメント