准确地从直线Alpha转换为预乘Alpha和背面

时间:2016-08-16 03:08:16

标签: c# wpf image-processing

我有一个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;有损?

0 个答案:

没有答案