gpt4 book ai didi

delphi - 使用 Delphi XE 在运行时将 png 图像添加到图像列表

转载 作者:行者123 更新时间:2023-12-03 14:40:57 25 4
gpt4 key购买 nike

我需要在运行时将 png 图像添加到 TImageList 中。我查看了 TCustomImageList 实现的函数,但它们只允许添加

  • 位图,
  • 图标或
  • 来自另一个图像列表的图像

例如:

function Add(Image, Mask: TBitmap): Integer;
function AddIcon(Image: TIcon): Integer;
function AddImage(Value: TCustomImageList; Index: Integer): Integer;
procedure AddImages(Value: TCustomImageList);
function AddMasked(Image: TBitmap; MaskColor: TColor): Integer;

如何将 PNG 图像添加到 ImageList 组件而不将该图像转换为 BMP?

IDE 已经可以在设计时将 PNG 添加到 ImageList:

enter image description here

现在我们需要在运行时执行此操作。

最佳答案

Delphi XE 拥有处理 png 图像和 32 位的所有支持带有 Alpha channel 的位图。以下是将 png 添加到 ImageList 的方法:

uses CommCtrl;

var pngbmp: TPngImage;
bmp: TBitmap;
ImageList: TImageList;
begin
ImageList:=TImageList.Create(Self);
ImageList.Masked:=false;
ImageList.ColorDepth:=cd32bit;
pngbmp:=TPNGImage.Create;
pngbmp.LoadFromFile('test.png');
bmp:=TBitmap.Create;
pngbmp.AssignTo(bmp);
// ====================================================
// Important or else it gets alpha blended into the list! After Assign
// AlphaFormat is afDefined which is OK if you want to draw 32 bit bmp
// with alpha blending on a canvas but not OK if you put it into
// ImageList -- it will be way too dark!
// ====================================================
bmp.AlphaFormat:=afIgnored;
ImageList_Add(ImageList.Handle, bmp.Handle, 0);

您必须包含

ImgList、PngImage

如果您现在尝试:

  Pngbmp.Draw(Bmp1.Canvas,Rect);
and
ImageList.Draw(Bmp1.Canvas,0,0,0,true);

您会发现图像是相同的。其实有几个\pm 1 由于 alpha 混合期间的舍入误差而导致的 rgb 差异但你无法用肉眼看到它们。忽略设置bmp.AlphaFormat:=afIgnored;会导致第二张图像是更暗了!

最诚挚的问候,

亚历克斯

关于delphi - 使用 Delphi XE 在运行时将 png 图像添加到图像列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com