改变深色的颜色矩阵

Color matrix to change dark color

我尝试制作一个为图像着色的函数 - 去饱和并用提供的 RGB 颜色替换深色。

我在 Mario Klingemann AS3 ColorMatrix 库中找到了类似的函数,它在保留暗色的同时替换浅色。

public function colorize(rgb:int, amount:Number=1):void
    {
        const LUMA_R:Number = 0.212671;
        const LUMA_G:Number = 0.71516;
        const LUMA_B:Number = 0.072169;

        var r:Number;
        var g:Number;
        var b:Number;
        var inv_amount:Number;

        r = (((rgb >> 16) & 0xFF) / 0xFF);
        g = (((rgb >> 8) & 0xFF) / 0xFF);
        b = ((rgb & 0xFF) / 0xFF);
        inv_amount = (1 - amount);

        concat([(inv_amount + ((amount * r) * LUMA_R)), ((amount * r) * LUMA_G), ((amount * r) * LUMA_B), 0, 0, 
                ((amount * g) * LUMA_R), (inv_amount + ((amount * g) * LUMA_G)), ((amount * g) * LUMA_B), 0, 0, 
                ((amount * b) * LUMA_R), ((amount * b) * LUMA_G), (inv_amount + ((amount * b) * LUMA_B)), 0, 0, 
                0, 0, 0, 1, 0]);
    }

我尝试修改矩阵但没有成功。请提供任何帮助或 link 信息或代码让我前进一点。

您可以尝试使用上面的方法,但在应用之前,您需要反转图像和颜色。然后在应用矩阵之后,再次反转图像。

毕竟我在这个结果中找到了诀窍:

            concat([(LUMA_R), (LUMA_G), (LUMA_B), 0, amount*255*r, 
                (LUMA_R), (LUMA_G), (LUMA_B), 0, amount*255*g, 
                (LUMA_R), (LUMA_G), (LUMA_B), 0, amount*255*b, 
                0, 0, 0, 1, 0]);

它完全符合我的需要。 感谢 Quasimondo 提供他出色的 AS3 库。帮助我理解颜色矩阵变换。