delphi – 一个按钮控件和底层替换TBitmap,正确处理PNG透明度,而无需编写预混合代码

前端之家收集整理的这篇文章主要介绍了delphi – 一个按钮控件和底层替换TBitmap,正确处理PNG透明度,而无需编写预混合代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Delphi 2010的TSpeedButtons似乎并没有真正地支持PNG透明度,因为Glyph属性在内部使用了一个TBitmap,而TBitmap是用于位图,并且不能正确支持PNG透明度,而TSpeedButton.Glyph不能支持透明度.但是实际的问题是,我有一些外部的东西(Developer Express组件),即渲染delphi的PNG支持不起作用,另一方面,T Image,虽然它仍然是TPicture,并且可以支持PNG,也受到这个Developer Express的影响错误.

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

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

重复一遍,因为它缺少现代的PNG透明度功能,所以我不会问如何解决黑色环绕外的问题,同时仍然使用过时的TBitmap / TSpeedButton的VCL功能,我要求将其替换为还有一些“工作”.

作为次要缺点,将小型.png文件转换为.DFM位图资源本质上是浪费空间,并使我的formDFM内容过大. .dfm中的原生.png文件格式存储应该使生成的表单更小.

更新:PngComponents看起来像他们应该工作,但是当我尝试将png加载到Png速度按钮时,我收到了无效的图形格式错误.请注意,Png图像列表组件没有这样的问题.似乎cxLibrary(开发者快递包)正在打破事情.一旦我删除了所有开发人员的快递,这个问题就消失了.所以虽然我选择了Png组件作为答案,如果你安装了devex的东西,使用它们的按钮,而不是png组件.

解决方法

您可以看看 PngComponents.它有一个TPngSpeedbutton和一些其他控件直接与PngImages工作.

猜你在找的Delphi相关文章