我想从TImageList
到TImage
加载图片(32位深,透明)。标准方法是ImageList.GetBitmap(Index, Image.Picture.Bitmap);
。但是GetBitmap
方法不适用于透明度,所以我总是得到一个不透明的位图。
答案 0 :(得分:28)
解决方法相当简单 - ImageList提供了另一种方法GetIcon
,它可以正常工作。加载透明图像的代码是:
ImageList.GetIcon(Index, Image.Picture.Icon);
不要忘记设置正确的ImageList属性:
ImageList.ColorDepth:=cd32bit;
ImageList.DrawingStyle:=dsTransparent;
答案 1 :(得分:2)
我从tImageList传入图像也遇到了各种各样的问题。所以我有一个简单的包装程序,通常可以完成工作并强制实现透明性。下面的代码是Delphi 2005,imlActiveView是包含我的按钮字形图像集的tImageList组件。
procedure TfrmForm.LoadBitmap (Number : integer; bmp : tBitMap);
var
ActiveBitmap : TBitMap;
begin
ActiveBitmap := TBitMap.Create;
try
imlActiveView.GetBitmap (Number, ActiveBitmap);
bmp.Transparent := true;
bmp.Height := ActiveBitmap.Height;
bmp.Width := ActiveBitmap.Width;
bmp.Canvas.Draw (0, 0, ActiveBitmap);
finally
ActiveBitmap.Free;
end
end;
以下是使用第5个imlActiveView图像传递到btnNavigate.Glyph的示例。
LoadBitmap (5, btnNavigate.Glyph)