如何从ImageList加载透明图像?

时间:2012-07-22 11:50:05

标签: delphi png transparency timage timagelist

我想从TImageListTImage加载图片(32位深,透明)。标准方法是ImageList.GetBitmap(Index, Image.Picture.Bitmap);。但是GetBitmap方法不适用于透明度,所以我总是得到一个不透明的位图。

2 个答案:

答案 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)