当我设置一个setRGB的值时,getRGBreturns一个不同的值。为什么?

When I set a value of setRGB, getRGB returns a different value. Why?

为什么这里我setRGB()用了三种RGB颜色(125,126,127),但是getRGB的时候returns另一个值就是(125,126,128)。 对于 (122, 126, 127),它 returns 为真 (122, 126, 127)。 为什么? 和: 输入:image.setRGB (0, 0, 5072962) // 77 ----- 104 ----- 66 ------ 5072962 输出:78 ------ 104 ------ 69 ------ 5138501 (使用 rgb = (red << 16) | (green << 8) | blue;)

我的代码:

// 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!");
    }

}

首先,您知道图像文件格式吗?在类似的情况下,我之前遇到过同样的问题。我想向您提出以下建议。

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

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

希望对您有所帮助。