10

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

4

2 回答 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 回答