我有一个RGBA源图像,我需要将其转换为Pre-Multiplied BGRA,用于WPF图像显示和缩放。之后我需要将PBGRA转换回直接RGBA。我一直在使用这些公式进行转换和转换:
PC = C * A / 255.0 + 0.5
并返回:
C = 255.0 * PC / A + 0.5
其中C
为彩色,PC
为预倍增颜色,两者均为byte
类型。
问题在于,当我什么也不做,只是将RGBA转换为PBGRA并返回到RGBA而没有进一步处理,然后将原始RGBA与得到的转换后的RGBA进行比较时,会产生大量的逐个错误。< / p>
是否存在转换和转换后的算法集合,可以生成原始图像的精确副本?
我正在使用C#,但任何使用C / C ++或Java的示例都可以使用。
这是我用来预乘的代码:
Func<byte, byte, byte> preMultiply = (source, alpha) => (byte)(source * (double)alpha / 255.0 + 0.5);
转回来:
Func<byte, byte, byte> deMultiply = (color, alpha) => {
if (alpha == 0) return color;
return (byte)(255.0 * color / alpha + 0.5);
};
有没有办法做到这一点是&#34; less&#34;有损?