2013-01-20 65 views
1

我正在寫一個程序,允許用戶比較2張照片,1作爲示例顏色和另一個進行編輯。我將從第一個收集像素信息,然後應用以下方法編輯後者。在android中的圖像顏色校正java

得到的照片: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

該功能似乎按預期工作。

但是,我注意到的一件事是,在您實際設置新像素的最終輸出之前,您正在將「if」情況用於驗證邊界。

 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;} 
     input.setPixel(i,j,Color.argb(255,inR + deltaR,inG + deltaG,inB + deltaB)); 

我相信這是你真正想要做的。

 inR += deltaR 
     inG += deltaG 
     inB += deltaB 
     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;} 
     input.setPixel(i,j,Color.argb(255,inR,inG,inB)); 
+0

OMG!我完全沒有注意到它哈哈。好的,謝謝WLin!問題現在已修復:) – user1950532