如何从ImageList加载透明图像



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

解决方法相当简单-ImageList提供了另一种方法GetIcon,它可以在透明的情况下正常工作。加载透明图像的代码为:

ImageList.GetIcon(Index, Image.Picture.Icon);

别忘了设置正确的ImageList属性:

ImageList.ColorDepth:=cd32bit;
ImageList.DrawingStyle:=dsTransparent;

我在从tImageList传入图像时也遇到了各种问题。因此,我有一个简单的包装程序,它通常可以完成这项工作,并加强透明度。下面的代码是Delphi2005,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.GGlyph.

LoadBitmap (5, btnNavigate.Glyph)

相关内容

  • 没有找到相关文章

最新更新