PNG的TBitmap.LoadFromFile会更改RGB值 - 我可以阻止它吗?

时间:2017-08-08 11:54:31

标签: delphi png firemonkey

我需要访问.png图像文件的RGBA数据。我发现使用Firemonkey的TBitmap.LoadFromFile读取.png图像会改变RGB值。它们被alpha值预乘,因此当alpha不是255时,它会丢失原始的RGB值。

在Windows中,我将它追溯到FMX.Canvas.D2D中的TBitmapCodecWIC.DecodeFrame,它使用GUID_WICPixelFormat32bppPBGRA像素格式,根据WIC文档暗示D2D1_ALPHA_MODE_PREMULTIPLIED。

进一步调查,我知道我可以通过执行" UnPreMultiplyAlpha"来近似恢复丢失的RGB值。它有效地将RGB值再次除以α值。这在视觉上是有效的,但是你可以想象它是非常有损的,特别是对于具有低alpha值和/或低RGB值的像素。

有没有办法告诉TBitmap.LoadFromFile保留原始的RGBA值?

0 个答案:

没有答案