TBitmap的按钮控件和底层替换,可以在不编写预混合代码的情况下正确处理PNG透明度

时间:2011-08-23 15:30:38

标签: delphi png delphi-2010 png-transparency

Delphi 2010的TSpeedButtons似乎并没有真正支持PNG透明度,因为Glyph属性在内部使用TBitmap,而TBitmap用于位图,并且不能正确支持PNG透明度,并且TSpeedButton.Glyph无法支持透明度.. 更新:但实际的问题是我有一些外部的东西(Developer Express组件),这使得delphi的PNG支持无功能,另一方面TImage,虽然它仍然是TPicture,并且可以支持PNG,也受此Developer Express错误的影响。

已经询问了有关here的问题,答案显示了如何使用预混合,以便透明度不会变成黑色像素。我想知道是否有另一个按钮控件将使用在设计时加载的alpha混合PNG,并且不会将PNG资源转换为丢弃Alpha通道的BMP格式,并导致此处显示的黑色边框。

简而言之,此控件不会使用TBitmap,也不会使用TBitmap所具有的颜色键透明度功能。

重复一下,我不是在问仍然使用过时的基于TBitmap / TSpeedButton的VCL功能时如何解决黑外问题,因为它缺乏现代的PNG透明功能,我问的是用“正常工作”的其他东西取而代之。

作为次要的缺点,将一个小的.png文件转换为.DFM位图资源实际上是浪费空间并使我的表单.DFM内容太大。 .dfm中的原生.png文件格式存储应该使得结果形式更小。

enter image description here

更新: PngComponents看起来应该可以正常工作,但当我尝试将png加载到Png速度按钮时出现Invalid Graphic format错误。请注意,Png图像列表组件没有这样的问题。似乎cxLibrary(开发人员快递包)正在破坏事物。一旦我删除了所有开发者表达的东西,这个问题就消失了。因此,尽管我选择了Pngcomponents作为答案,但如果你安装了devex的东西,请改用它们的按钮,而不是pngcomponents。

enter image description here

3 个答案:

答案 0 :(得分:11)

您可以查看PngComponents。它有一个TPngSpeed按钮和一些其他控件直接与PngImages配合使用。

答案 1 :(得分:2)

您还可以查看名为TAdvGlowButton的TMS软件组件,因为它支持具有Alpha透明度的PNG图像。

Link to site...

答案 2 :(得分:2)

事实证明,Developer Express VCL组件包中的cxButton也支持PNG按钮。