在Android上着色图像处理

时间:2012-03-06 15:05:03

标签: java android image-processing

我试图关注Image Processing – Tint Color (Yet Another) Tutorial,但我不了解一些代码。我只知道程度影响音色数量的一件事。你能解释一下吗?

以下是我不理解的代码:

                int index = y * width + x;
                int r = ( pix[index] >> 16 ) & 0xff;
                int g = ( pix[index] >> 8 ) & 0xff;
                int b = pix[index] & 0xff;
                RY = ( 70 * r - 59 * g - 11 * b ) / 100;
                GY = (-30 * r + 41 * g - 11 * b ) / 100;
                BY = (-30 * r - 59 * g + 89 * b ) / 100;
                Y  = ( 30 * r + 59 * g + 11 * b ) / 100;
                RYY = ( S * BY + C * RY ) / 256;
                BYY = ( C * BY - S * RY ) / 256;
                GYY = (-51 * RYY - 19 * BYY ) / 100;

1 个答案:

答案 0 :(得分:1)

基本上,这段代码正在改变图像中每个RBG通道的颜色。我会逐行分解。

            int r = ( pix[index] >> 16 ) & 0xff;
            int g = ( pix[index] >> 8 ) & 0xff;
            int b = pix[index] & 0xff;

上面的代码只获取原生的红色,蓝色和绿色值。

            RY = ( 70 * r - 59 * g - 11 * b ) / 100;
            GY = (-30 * r + 41 * g - 11 * b ) / 100;
            BY = (-30 * r - 59 * g + 89 * b ) / 100;

这些都会在稍后反馈,但请注意,RY主要是红色,BY大部分是蓝色,而GY则是绿色和红色的混合。一个关键特征是所有3个乘法器加起来为0,从而保持校正的中立性(图像不会变亮)。 GY实际上并不重要,因为代码中的任何其他地方都没有使用它。

            Y  = ( 30 * r + 59 * g + 11 * b ) / 100;
            RYY = ( S * BY + C * RY ) / 256;
            BYY = ( C * BY - S * RY ) / 256;
            GYY = (-51 * RYY - 19 * BYY ) / 100;

再次,只需应用公式即可获得所需的着色效果。 S和C是在调用函数时传递给函数的角度的Sin和Cos值。色调是通过角度的函数。在角度0处,图像将最接近正常颜色,因为角度改变,它将倾向于将红色变为蓝色,蓝色变为红色,绿色将是两者的某种组合,主要取决于红色。 / p>