1

色付けしたい3つのグレースケール画像があります.先週同様の質問をしてアドバイスを受けました.画像の各ピクセルのRGB値を読み取る以下のコードがあります. 個々の画像ごとにこれを行いたい、つまり、1番目の画像は赤のピクセル値を読み取り、2番目の画像は青のピクセル値を読み取り、3番目の画像は緑のピクセル値を読み取り、そこから新しい画像を作成します。コードを 3 回繰り返してみましたが、それを 1 つのピクセルに適用して繰り返し続けているように見えましたが、その理由はわかりませんでした。私は本質的にコードを 3 回コピーして貼り付けましたが、もっと短くて簡単な方法があると確信しています。

次を使用して画像を読んでいます:

public static void main(final String args[])
    throws IOException
{
    File file = new File("src/resources/rgb.jpg");
    BufferedImage src = ImageIO.read(file);
    BufferedImage image = toBufferedImage(src);
    save(image, "png");
}

private void img1(BufferedImage image, BufferedImage src) {
    for (int x = 0; x < image.getWidth(); x++) {
        for (int y = 0; y < image.getHeight(); y++) {

            int clr = src.getRGB(x, y);
            int red = (clr & 0x00ff0000) >> 16;
            //int green = (clr & 0x0000ff00) >> 8;
            //int blue = clr & 0x000000ff; 

        }
    }
}

したがって、基本的にコードを 3 回繰り返してから、結果から新しい画像を作成する必要があります。誰かが助けてくれるかどうか疑問に思っていますか?

前もって感謝します

4

1 に答える 1

1

double for ループをメソッドに引き出します (どのように機能させたいか正確にはわかりません):

private void doStuffToImage(Image image, Image src) {
  for (int x = 0; x < image.getWidth(); x++) {
    for (int y = 0; y < image.getHeight(); y++) {
      final int clr = src.getRGB(x, y);
      final int red = (clr & 0x00ff0000) >> 16;
      final int green = (clr & 0x0000ff00) >> 8;
      final int blue = clr & 0x000000ff;
    }
  }
}

また、すべてのfinals を破棄します。

于 2013-10-25T18:05:15.263 に答える