0

こんにちは、私は Java のクラスを受講しており、プログラミングに関してはまったくの初心者です。

ユーザーにさまざまな画像をロードし、RGB値を多次元配列で返すように要求するプログラムを作成しようとしています。両方の部分が別々に機能していますが、2 つを一緒に機能させるのに問題があります。

toolkit.getImage- を使用して、1 つのクラスに画像をロードします。

void imageload1 () 
    {
        fd.show();
        if(fd.getFile() == null)
        { 
            Label1.setText("Try again");
        }//end if
        else
        {
            String d = (fd.getDirectory() + fd.getFile());
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            image1 = toolkit.getImage(d);
            canvas1.setImage(image1);
            canvas1.repaint();

            GetRGB testRGB;
            testRGB = new GetRGB();
            testRGB.setup(image1, image2);

        }//end else
    }//end imageLoad1

次に、画像を別のクラスに送信して、RGB 値を取得します。

public void setup(Image image1, Image image2) 
{
    try {
          // get the BufferedImage, using the ImageIO class
          BufferedImage image = 
            ImageIO.read(this.getClass().getResource("imag1"));
          marchThroughImage(image);
        } catch (IOException e) {
          System.err.println(e.getMessage());
        }
      }

    private void marchThroughImage(BufferedImage image) {
    int w = image.getWidth();
    int h = image.getHeight();
    int [][] pixels = new int [h][w];
    int lenRows = pixels.length;
    int lenColums = pixels[0].length;
    System.out.println("width, height: " + w + ", " + h);

    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            System.out.println("x,y: " + j + ", " + i);
            int pixel = image.getRGB(j, i);
            printPixelARGB(pixel);
            pixels [i][j] = image.getRGB(j,i);
            System.out.println("");
            System.out.println("there are "+lenRows+" rows");
            System.out.println("there are "+lenColums+" colums");
        }
    }
}

public void printPixelARGB(int pixel) {
    int alpha = (pixel >> 24) & 0xff;
    int red = (pixel >> 16) & 0xff;
    int green = (pixel >> 8) & 0xff;
    int blue = (pixel) & 0xff;
    System.out.println("argb: " + alpha + ", " + red + ", " + green + ", " + blue);
}

}

これにより、「java.lang.IllegalArgumentException」エラーが発生します。問題は、画像を読み取れないことだと思います。画像を BufferedImage に変換する必要があるのか​​、名前が間違っているのか、ファイルを間違って読み取ろうとしているのかはわかりません。これを機能させるためにさまざまな方法を試しましたが、うまくいきませんでした。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

0

ImageIO.read javadoc の「Throws: IllegalArgumentException - if input is null.」から、this.getClass().getResource("imag1") が null を返すため、問題が発生します。まず、「imag1」の拡張子 (.png、.jpg など) を指定してテストする必要があります。問題が解決しない場合は、画像を探しているパスを確認してください (コードからわかるように、メソッド「setup」を含むクラスと同じディレクトリにある必要があります)。

于 2013-04-23T11:56:07.337 に答える