gpt4 book ai didi

Delphi - 在运行时用图标填充图像列表 'destroys' 透明度

转载 作者:行者123 更新时间:2023-12-03 15:00:23 26 4
gpt4 key购买 nike

我花了几个小时来解决这个(简单的)问题,但没有找到解决方案:/

我正在使用 D7 和 TImageList。 ImageList 被分配给工具栏。当我在设计时填充 ImageList 时,图标(具有部分透明度)看起来很好。但我需要在运行时填充它,当我这样做时,图标看起来很糟糕——完全失去了部分透明度。

我只是尝试从 .res 文件加载图标 - 得到相同的结果。我尝试过第三方图像列表也没有成功。我不知道我能做什么:/谢谢大家 2 ;)

编辑:

说实话,我不知道到底发生了什么。 Alpha 混合是正确的术语......这里有 2 个屏幕截图:

在设计时添加的图标: alt text
(来源:shs-it.de)

运行时添加的图标: alt text
(来源:shs-it.de)

您关于不支持 alpha 混合的评论刚刚带来了解决方案:我已经在编辑器中编辑了图像并删除了“alpha 混合”像素 - 现在看起来不错。但奇怪的是,在运行时而不是设计时添加的图标看起来不一样。如果您(或其他人;)可以解释它,我会很高兴;)感谢您的支持!

最佳答案

要支持 Alpha 透明度,您需要创建图像列表并在运行时填充它:

function AddIconFromResource(ImageList: TImageList; ResID: Integer): Integer;
var
Icon: TIcon;
begin
Icon := TIcon.Create;
try
Icon.LoadFromResourceID(HInstance, ResID);
Result := ImageList.AddIcon(Icon);
finally
Icon.Free;
end;
end;

function AddPngFromResource(ImageList: TImageList; ResID: Integer): Integer;
var
Png: TPngGraphic;
ResStream: TStream;
Bitmap: TBitmap;
begin
ResStream := nil;
Png := nil;
Bitmap := nil;
try
ResStream := TResourceStream.CreateFromID(HInstance, ResID, RT_RCDATA);
Png := TPNGGraphic.Create;
Png.LoadFromStream(ResStream);
FreeAndNil(ResStream);
Bitmap := TBitmap.Create;
Bitmap.Assign(Png);
FreeAndNil(Png);
Result := ImageList.Add(Bitmap, nil);
finally
Bitmap.Free;
ResStream.Free;
Png.Free;
end;
end;

// this could be e.g. in the form's or datamodule's OnCreate event
begin
// create the imagelist
ImageList := TImageList.Create(Self);
ImageList.Name := 'ImageList';
ImageList.DrawingStyle := dsTransparent;
ImageList.Handle := ImageList_Create(ImageList.Width, ImageList.Height, ILC_COLOR32 or ILC_MASK, 0, ImageList.AllocBy);
// populate the imagelist with png images from resources
AddPngFromResource(ImageList, ...);
// or icons
AddIconFromResource(ImageList, ...);

end;

关于Delphi - 在运行时用图标填充图像列表 'destroys' 透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3056889/

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