当我设置setRGB的值时,getRGB返回不同的值。为什么?

时间:2017-06-06 01:35:04

标签: java rgb

为什么在这里我用三种RGB颜色(125,126,127)设置RGB(),但是当getRGB它返回另一个值(125,126,128)。 对于(122,126,127),它返回true(122,126,127)。 为什么? 和: 输入:image.setRGB(0,0,5072962)// 77 ----- 104 ----- 66 ------- 5072962 输出:78 ------ 104 ------ 69 ------- 5138501 (rgb =(红色<< 16)|(绿色<<<<<<<<<<<<<"

我的代码:

// 77 ------- 104 ------- 66 ------ 5072962

final static int rgb = 5072962;

public static void main(String[] args) {

    BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);

    //image.setRGB(0, 0, 5072962);
    Color c = new Color(125, 126, 127);
    image.setRGB(0, 0, c.getRGB());

    File outputFile = new File("123.jpg");
    try {
        ImageIO.write(image, "jpg", outputFile);
        File f = new File("123.jpg");
        BufferedImage bi = ImageIO.read(f);
        for (int h = 0; h < 1; h++) {
            for (int w = 0; w < 1; w++) {
                int pixel = bi.getRGB(w, h);
                Color c2 = new Color(pixel);

                int red = c2.getRed();
                int green = c2.getGreen();
                int blue = c2.getBlue();

                int rgb = (red << 16) | (green << 8) | blue;
                System.out.printf("%-8d%-8d%-8d%-8d", red, green, blue, rgb);
                System.out.println("");
            }
        }
    } catch (IOException ex) {
        System.out.println("Error output File image!");
    }

}

1 个答案:

答案 0 :(得分:2)

首先,你知道图像文件格式吗?在类似的情况下,我有同样的问题。我想建议你以下。

当您使用jpg将图像写入操作存储到存储中时,RGB值会略有变化,因为jpg格式是一种有损压缩文件格式。此压缩允许您获得存储文件的最佳空间,但它不会存储您想要的RGB值的信息。

因此,如果文件格式对您来说不是一个大问题,那么只需使用PNG格式。 PNG格式是无损压缩文件格式,因此您可以检索之前在程序中设置的RGB值。

希望它对你有所帮助。