我想将图片(32 位深度,透明)从 a 加载TImageList
到TImage
. 标准方法是ImageList.GetBitmap(Index, Image.Picture.Bitmap);
. 但是该GetBitmap
方法不适用于透明度,所以我总是得到一个不透明的位图。
问问题
21591 次
2 回答
34
解决方法相当简单 - ImageList 提供了另一种方法GetIcon
,它适用于透明度。加载透明图像的代码是:
ImageList.GetIcon(Index, Image.Picture.Icon);
并且不要忘记设置正确的 ImageList 属性:
ImageList.ColorDepth:=cd32bit;
ImageList.DrawingStyle:=dsTransparent;
于 2012-07-22T11:50:05.093 回答
3
从 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)
于 2014-01-08T20:56:40.967 回答