2017-04-07 11 views
0

画像があり、すべての緑色のピクセルを削除しようとしています。どのように私は単純なJavaと2D配列を使用してこれを行うのですか?画像の緑色のピクセルをjavaを使用して置き換えます。

はこれまでのところ、私のコードは次のようになります。

public void removeGreen() { 

     Picture pic = new Picture("IMG_7320.JPG"); 
     Pixel pixel = null; 
     for (int row = 0; row < pic.getHeight(); row++) { 
      for (int col = 0; col < pic.getWidth(); col++) { 
       pixel = getPixel(row,col); 
       pixel.getColor(); 
       if(pixel.getRed() < 40 & pixel.getBlue() < 160 & pixel.getGreen() > 220) { 
        Color white = new Color(255,255,255); 
        pixel.setColor(white); 
       } 
      } 
     } 
    } 

(私は完全にピクセルを削除するかどうかはわかりませんので、今のところ私は白画素と緑色画素を交換しようとしています。)

そして、私はremoveGreen()メソッドをテストするために使用しています私のメインメソッドのコードは、次のようになります。

//method to test removeGreen 

    public static void testRemoveGreen() { 

     Picture me = new Picture("IMG_7320.JPG"); 
     me.explore(); 
     me.removeGreen(); 
     me.explore(); 
    } 


だから、私のコードは次のようになります(int型の列= 0のため

ます。public void removeGreen(ピクチャーPIC){

。行< pic.getHeight();行++){

for (int col = 0; col < pic.getWidth(); col++) { 
     Pixel pixel = pic.getPixel(row,col); 

     if((pixel.getRed() < 40) && (pixel.getBlue() < 160) && (pixel.getGreen() > 220)) { 
      Color white = new Color(255,255,255); 
      pixel.setColor(white); 
     } 
    } 

}}

と私の主な方法が依然として同じです。私はまだ方法が適切に動作していない理由を理解していない。

+1

他の画像のピクセルに置き換える必要がありますか?緑色の画面の種類?あなたの質問を明確にする。画像のサイズを変更せずに画像からピクセルを削除することは決してできません。作業している画像フォーマットがアルファチャンネルをサポートしていると仮定すると、できるだけ透明にすることができます。 – Havenard

+1

また、データを収集してイメージ「this」を修正している間に、イメージ「pic」を繰り返しているように思えます。 – Havenard

答えて

0

以下は、渡されたpicパラメータが変更されていることが明らかです。

public static void removeGreen(Picture pic) { 
     for (int row = 0; row < pic.getHeight(); row++) { 
      for (int col = 0; col < pic.getWidth(); col++) { 
       Pixel pixel = pic.getPixel(row,col); 
       if (pixel.getRed() < 40 && pixel.getBlue() < 160 
         && pixel.getGreen() > 220) { 
        pixel.setColor(Color.white); 
       } 
      } 
     } 
    } 

&&はショートカットであるAND:x && y()は、Yを呼び出しませんxが偽です。

注意:pic.getPixelremoveGreenPictureの方法である場合は、パラメータとstaticキーワード、およびpic.を削除します。

public static void testRemoveGreen() { 
    Picture me = new Picture("IMG_7320.JPG"); 
    me.explore(); 
    removeGreen(me); 
    me.explore(); 
} 

.jpg、JPEG形式には透明度がないため、白のような色を「背景」として表示する必要があります。

関連する問題