我需要访问.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值?