0

我正在编写一个程序,它结合了 3 个图像的 RGB 像素值,例如图像 1 的红色像素、图像 2 的绿色像素和图像 3 的蓝色像素,然后我想创建它的最终图像。我使用下面的代码,但这似乎是增加 x2 和 x3 而 x1 是相同的,即没有为每个图像的相同坐标提供正确的像素值。

for (int x = 0; x < image.getWidth(); x++) {
            for (int x2 = 0; x2 < image2.getWidth(); x2++) {
                for (int x3 = 0; x3 < image3.getWidth(); x3++) {

       for (int y = 0; y < image.getHeight(); y++) {
           for (int y2 = 0; y2 < image2.getHeight(); y2++) {
               for (int y3 = 0; y3 < image3.getHeight(); y3++) {

所以我想知道是否有人可以告诉我如何在同一坐标上遍历 3 个图像中的每一个,例如读取每个图像的 1、1 并相应地记录红色、绿色和蓝色值。抱歉,如果它不完全有意义,它有点难以解释。我可以很好地迭代一个图像的值,但是当我添加另一个图像时,事情开始有点不对劲,因为显然它有点复杂!我在想创建一个数组并替换相应的值可能更容易,只是不确定如何有效地做到这一点。

谢谢

4

2 回答 2

2

如果我正确理解了您的问题,也许您可​​以尝试以下方法:

public BufferedImage combine(final BufferedImage image1, final BufferedImage image2, final BufferedImage image3){
    final BufferedImage image = new BufferedImage(image1.getWidth(), image1.getHeight(), image1.getType());
    for(int x = 0; x < image.getWidth(); x++)
        for(int y = 0; y < image.getHeight(); y++)
            image.setRGB(x, y, new Color(new Color(image1.getRGB(x, y)).getRed(), new Color(image2.getRGB(x, y)).getGreen(), new Color(image3.getRGB(x, y)).getBlue()).getRGB());
    return image;
}

对于更具可读性的解决方案:

public BufferedImage combine(final BufferedImage image1, final BufferedImage image2, final BufferedImage image3){
    final BufferedImage image = new BufferedImage(image1.getWidth(), image1.getHeight(), image1.getType());
    for(int x = 0; x < image.getWidth(); x++){
        for(int y = 0; y < image.getHeight(); y++){
            final int red = new Color(image1.getRGB(x, y)).getRed();
            final int green = new Color(image2.getRGB(x, y)).getGreen();
            final int blue = new Color(image3.getRGB(x, y)).getBlue();
            final int rgb = new Color(red, green, blue).getRGB();
            image.setRGB(x, y, rgb);
        }
    }
    return image;
}

我的解决方案是基于所有 3 个图像都相似(相同尺寸和类型)的假设。

于 2013-10-26T15:50:07.180 回答
1

您可以尝试使用 double for,只是为了遍历坐标。我知道它不起作用,但这个想法可能会有所帮助。

for(int i = 0; i < width; i++) {
    for(int j = 0; j < height; j++) {
         int R = image1.R(x, y);
         int G = image2.G(x, y);             
         int B = image3.B(x, y);
         // Some other stuff here
    }
}
于 2013-10-26T15:53:15.103 回答