2013-01-14 52 views
0

我是android編程的新手。現在我正在做一個使用java for android平臺的顏色校正程序。Android上的色彩校正

在程序中,我應該能夠在位圖上選擇一個點,並告訴程序它實際上是白色的,程序將重新調整該位圖的所有像素,以便所有顏色位圖將是正確的。

誰能告訴我我該怎麼做?我現在已經能夠從位圖中檢索一個點並計算其RGB值,但我不知道該如何繼續。請給我看一些我可以閱讀的例子或文章。

非常感謝您的寶貴時間。希望早日收到你的消息!


得到的照片: http://www.flickr.com/photos/[email protected]/8392038944/in/photostream

我的照片被更新,儘管質量/噪音/彩色的,有怪異的顏色在這裏和那裏。任何人有任何想法我應該做什麼來刪除它?或者甚至更好地改進我使用的方法?下面是代碼:

輸入是要編輯的位圖,inColor是要編輯的照片中鼻子的顏色,reqcolor是樣本/最佳照片中我鼻子的顏色。

public Bitmap shiftRGB(Bitmap input, int inColor, int reqColor){ 

     int deltaR = Color.red(reqColor) - Color.red(inColor); 
     int deltaG = Color.green(reqColor) - Color.green(inColor); 
     int deltaB = Color.blue(reqColor) - Color.blue(inColor); 

     //--how many pixels ? -- 
     int w = input.getWidth(); 
     int h = input.getHeight(); 


     //-- change em all! -- 
     for (int i = 0 ; i < w; i++){ 
      for (int j = 0 ; j < h ; j++){ 
       int pixColor = input.getPixel(i,j); 

       //-- colors now ? -- 
       int inR = Color.red(pixColor); 
       int inG = Color.green(pixColor); 
       int inB = Color.blue(pixColor); 

       if(inR > 255){ inR = 255;} 
       if(inG > 255){ inG = 255;} 
       if(inB > 255){ inB = 255;} 
       if(inR < 0){ inR = 0;} 
       if(inG < 0){ inG = 0;} 
       if(inB < 0){ inB = 0;} 

       //-- colors then -- 
       input.setPixel(i,j,Color.argb(255,inR + deltaR,inG + deltaG,inB   + deltaB)); 
      } 
     } 

     return input; 
} 

非常感謝你的幫助!我無法表達我的感謝,而不是提前再次表示感謝!

+0

你某種亮度校正後?這意味着你選擇了一個灰色的像素,並告訴它應該是白色的 - 在這種情況下,所有的像素都應該以某個恆定的亮度增亮,以便使這個選定的像素變成白色。 – harism

+0

是的哈里斯!我想我也可以這樣做,因爲我需要將那些曝光不足的圖片中的顏色改回它應該看起來不丟失多少信息 – user1950532

回答

1

閱讀關於一些white-balancing算法。看看你是否可以實施一些。還要注意的是,android並沒有提供awt.graphics/BufferedImage API,這在大部分的java教程中都有使用。

Android提供ColorMatrixColorFilter,用於這種用途,discussed here

基本粗暴的方式來操縱像素:

public Bitmap shiftRGB(Bitmap input, int inColor, int reqColor){ 

    //--how much change ? -- 
    int deltaR = Color.red(reqColor) - Color.red(inColor); 
    int deltaG = Color.green(reqColor) - Color.green(inColor); 
    int deltaB = Color.blue(reqColor) - Color.blue(inColor); 

    //--how many pixels ? -- 
    int w = input.getWidth(); 
    int h = input.getHeight(); 

    //-- change em all! -- 
    for (int i = 0 ; i < w; i++){ 
     for (int j = 0 ; j < h ; j++){ 
      int pixColor = input.getPixel(i,j); 

      //-- colors now ? -- 
      int inR = Color.red(pixColor); 
      int inG = Color.green(pixColor); 
      int inB = Color.blue(pixColor); 

      //-- colors then -- 
      input.setPixel(i,j,Color.argb(255,inR + deltaR,inG + deltaG,inB + deltaB)); 

     } 
    } 

    //-- all done-- 
    return input; 
} 
+0

我認爲這可以工作,但是有人知道我可以如何操縱我的圖像的RGB?例如。在整個圖片上乘以一個矩陣。不知道我的位圖是否採用RGB565格式。 真的非常感謝那些幫助我的人! :) – user1950532

+0

@ user1950532更新的答案,希望能讓你開始。 –

+0

非常感謝!對我來說似乎是一個很好的開始。將嘗試一下,並回來更新我的結果。再次感謝:) – user1950532