0

bookClasses クラス セットを使用して画像を操作していますが、画像の赤目を除去しようとすると NullPointerException エラーが発生します。コードは次のとおりです。

まず、removeRedEyePicture.Java クラス内にあるメソッド:

 public void removeRedEye(int startX, int startY, int endX, int endY, Color newColor){

    Pixel pixel = null;

    for (int x = startX; x < endX; x++){
        for (int y = startY; y < endY; y++){
            if (pixel.colorDistance(Color.RED) < 167){
                        pixel.setColor(newColor);
            }
        }
    }
  }
}

そしてテストクラス:

public class TestRemoveRedEye{

    public static void main(String[] args){

        String fileName = FileChooser.getMediaPath("//jenny-red.jpg");

        Picture jennyPicture = new Picture(fileName);

        jennyPicture.removeRedEye(109,91,202,107,java.awt.Color.BLACK); 

        jennyPicture.explore();

    }
}

私のプログラムが機能しない理由を誰かが提案できれば、大歓迎です。

これらの行はエラーで選択されています: if (pixel.colorDistance(Color.RED) < 167){removeRedEye メソッドから

jennyPicture.removeRedEye(109,91,202,107,java.awt.Color.BLACK); テストクラスから

4

2 に答える 2

2

pixelnullであるため、その参照でメソッドを呼び出す前に初期化する必要があります。

Pixel pixel = null;// neew to initialize this.
pixel = new Pixel(); // somethin like this 
for (int x = startX; x < endX; x++){
    for (int y = startY; y < endY; y++){
        if (pixel.colorDistance(Color.RED) < 167){
于 2013-03-19T20:36:06.337 に答える
1

null を割り当てpixel、その直後にメソッドを呼び出します。したがって、NPE。

Pixel pixel = null;
for (int x = startX; x < endX; x++){
    for (int y = startY; y < endY; y++){
        if (pixel.colorDistance(Color.RED) < 167){ // <==== pixel is null !
                    pixel.setColor(newColor);
        }
    }
}
于 2013-03-19T20:36:05.657 に答える