取平均两个RGB值的结果不一致

时间:2017-04-25 13:06:35

标签: java image-processing rgb rgba

为什么这些像素rgb值有时相等,有时不相等?我正在学习图像处理。如果有人帮助我,那就太好了。

public class ColorTest1 {

    Color p1;
    Color p2;

    ColorTest1() throws IOException, InterruptedException {
        BufferedImage bi = ImageIO.read(new File("d:\\x.jpg"));
        for (int y = 0; y < bi.getHeight(); y++) {
            for (int x = 0; x < bi.getWidth() - 1; x++) {
                p1 = new Color(bi.getRGB(x, y));
                p2 = new Color(bi.getRGB(x + 1, y));

                int a = (p1.getAlpha() + p2.getAlpha()) / 2;
                int r = (p1.getRed() + p2.getRed()) / 2;
                int g = (p1.getGreen() + p2.getGreen()) / 2;
                int b = (p1.getBlue() + p2.getBlue()) / 2;

                int x1 = p1.getRGB();
                int x2 = p2.getRGB();

                int sum1 = (x1 + x2) / 2;

                int sum2 = a * 16777216 + r * 65536 + g * 256 + b;
                System.out.println(sum1 == sum2);
            }
        }
    }

    public static void main(String... areg) throws IOException, InterruptedException {
        new ColorTest1();
    }
}

这是图片:

This is the image

1 个答案:

答案 0 :(得分:0)

取两个像素。一个是黑色的。另一个几乎是黑色,但略带红色,只有1/255。忽略alpha。 r将为(0 + 1)/ 2 = 0. gb也将为0。 x1将为0. x2将为65536,对吗?因此sum1将为65536/2 = 32768. sum2显然为0。

每当两种颜色的红色或绿色之和为奇数时,int除法将设置RGB中下一种颜色的高位,从而导致意外结果。