2012-03-06 459 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