2012-03-06 96 views
2

我试图关注Image Processing – Tint Color (Yet Another) Tutorial,但我不明白一些代码。我只知道度数会影响音色数量的一件事。你能向我解释一下吗?Android上的着色图像处理

以下是我不理解的代码:

   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

本质上,这个代码位被改变各图像中的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是正弦和余弦值,用于传入函数的角度。色调是通过角度的函数。在角度0处,图像将与正常颜色最接近,随着角度改变,它将倾向于从红色变为蓝色,从蓝色变为红色,并且绿色将是这两者的某种组合,主要取决于红色。

+1

真的很感谢您的解释><!你让我很快乐 :)) – Yoo 2012-03-07 07:28:13