使用Delphi XE从资源加载时如何保留PNGImage掩码
发布时间:2020-12-15 09:46:53 所属栏目:大数据 来源:网络整理
导读:我正在将我的代码升级到Delphi XE(来自Delphi 7),并试图消除所有不必要的库.我已经使用了PNGComponents很多年了,但现在是时候继续使用原生的T ImageList和TPNG Image了. 我的部分代码在运行时从链接的资源中加载图像列表.我的工作PNGComponents代码是: func
我正在将我的代码升级到Delphi XE(来自Delphi 7),并试图消除所有不必要的库.我已经使用了PNGComponents很多年了,但现在是时候继续使用原生的T
ImageList和TPNG
Image了.
我的部分代码在运行时从链接的资源中加载图像列表.我的工作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,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通道进行部分透明.他们不使用面具.我想你的问题是你没有在图像列表中保留alpha.
>您应该将图像列表的ColorDepth设置为cd32Bit. 另外,它旨在使用Assign而不是AssignTo. AssignTo是一种内部方法,可为TPersistent启用温和形式的双重调度. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |