Delphi XE は、アルファ チャネルを使用して png 画像と 32 ビット ビットマップを処理するためのすべてのサポートを備えています。png を ImageList に追加する方法は次のとおりです。
uses CommCtrl;
var pngbmp: TPngImage;
bmp: TBitmap;
ImageList: TImageList;
begin
ImageList:=TImageList.Create(Self);
ImageList.Masked:=false;
ImageList.ColorDepth:=cd32bit;
pngbmp:=TPNGImage.Create;
pngbmp.LoadFromFile('test.png');
bmp:=TBitmap.Create;
pngbmp.AssignTo(bmp);
// ====================================================
// Important or else it gets alpha blended into the list! After Assign
// AlphaFormat is afDefined which is OK if you want to draw 32 bit bmp
// with alpha blending on a canvas but not OK if you put it into
// ImageList -- it will be way too dark!
// ====================================================
bmp.AlphaFormat:=afIgnored;
ImageList_Add(ImageList.Handle, bmp.Handle, 0);
含める必要があります
ImgList、PngImage
今試してみると:
Pngbmp.Draw(Bmp1.Canvas,Rect);
and
ImageList.Draw(Bmp1.Canvas,0,0,0,true);
画像が同じであることがわかります。実際には、アルファ ブレンディング中の丸め誤差により \pm 1 rgb の違いがいくつかありますが、肉眼では確認できません。bmp.AlphaFormat:=afIgnored の設定を怠っています。2 番目のイメージはさらに暗くなります。
よろしくお願いします、
アレックス