我试图关注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;
答案 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>