来自堆栈的Java中的假彩色图像

时间:2013-10-25 18:00:23

标签: java image algorithm image-processing colorize

我有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次,然后从结果中创建一个新图像。只是想知道是否有人可以提供帮助?

提前致谢

1 个答案:

答案 0 :(得分: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;
    }
  }
}

此外,抛弃所有final s。