当我设置一个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
值。
希望对您有所帮助。
为什么这里我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
值。
希望对您有所帮助。