1

我有 3 个要着色的灰度图像,上周我问了一个类似的问题并在那里接受了建议,我有下面的代码读取图像中每个像素的 RGB 值。我想为每个单独的图像执行此操作,即第一个图像读取红色像素值、第二个图像读取蓝色像素值和第三个图像读取绿色像素值并从中创建一个新图像。我尝试重复代码 3 次,但它似乎只是将其应用于一个像素并继续重复它,但我无法找出原因;我基本上复制并粘贴了 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

将您的双 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 回答