gpt4 book ai didi

delphi - 使用 Delphi XE 从资源加载时如何保留 PNGImage 蒙版

转载 作者:行者123 更新时间:2023-12-03 15:13:47 29 4
gpt4 key购买 nike

我正在将代码升级到 Delphi XE(从 Delphi 7),并尝试消除所有不必要的库。我已经使用 PNGComponents 多年了,但现在是时候继续使用 native TImageList 和 TPNGImage 了。

我的部分代码在运行时从链接的资源中加载图像列表。我的工作 PNGComponents 代码是:

function CreateAndLoadImageList( ASize : integer ) : TPngImageList;
var
PngObject : TPngObject;
I : integer;
begin
Result := TPngImageList.Create( nil );

Result.BeginUpdate;
try

Result.Width := ASize;
Result.Height := ASize;

PngObject := TPngObject.create;
try

For I := 0 to Length( ArtImageNames ) -1 do
begin
PngObject.LoadFromResourceName( hInstance, Format( 'AImg%d_%d', [ASize, I]));

Result.PngImages.Add( False).PngImage := PngObject;
end;

finally
PngObject.Free;
end;


finally
Result.EndUpdate;
end;

end;

使用this question中的答案我现在正在尝试下面的代码,该代码显示图像但具有黑色背景,大概是因为蒙版丢失了。我想我需要一个掩码位图来传递给 ImageList_Add 其中“0”,但我对这个东西很差。有谁知道我如何让它工作?

function CreateAndLoadImageList( ASize : integer ) : TImageList;
var
PngImage : TPngImage;
bmp : TBitmap;
I : integer;
begin

Result := TImageList.Create( nil );
Result.Masked := False;
Result.DrawingStyle := dsTransparent;

Result.BeginUpdate;
try

Result.Width := ASize;
Result.Height := ASize;
Result.Masked := False;

PngImage := TPngImage.create;
try

For I := 0 to Length( ArtImageNames ) -1 do
begin
PngImage.LoadFromResourceName( hInstance, Format( 'AImg%d_%d', [ASize, I]));


bmp:=TBitmap.Create;
PngImage.AssignTo(bmp);

bmp.AlphaFormat:=afIgnored;

ImageList_Add( Result.Handle, bmp.Handle, 0);
Bmp.Free;

end;
finally
PngImage.Free;
end;


finally
Result.EndUpdate;
end;

end;

最佳答案

PNG 图像使用 Alpha channel 实现部分透明。他们不使用口罩。我想你的问题是你没有在图像列表中保留 alpha。

  • 您应该将图像列表的 ColorDepth 设置为 cd32Bit
  • 当您将 PNG 图像分配给位图时,我希望位图的属性能够正确设置,因此请删除设置 AlphaFormat 的行。

顺便说一句,您应该使用Assign 而不是AssignToAssignTo 是一种内部方法,可为 TPercient 启用温和形式的双重调度。

关于delphi - 使用 Delphi XE 从资源加载时如何保留 PNGImage 蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882560/

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