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