【问题标题】:Java - setRGB in BufferedImage isnt changing to the correct colorJava - BufferedImage 中的 setRGB 没有更改为正确的颜色
【发布时间】:2017-07-17 16:57:49
【问题描述】:

我似乎无法让 bufferedimage 的 .setRGB 正常工作:

BufferedImage img = null;
try 
{
    img = ImageIO.read(new File("icons/br.jpeg"));
}
catch (IOException e) 
{
}

for(int x = img.getWidth()-1; x >= 0; x--)
{
    for(int y = img.getHeight()-1; y >= 0; y--)
    {
        Color b = new Color(255, 255, 255);
        img.setRGB(x, y, b.getRGB());
    }
}

//Save New Image
File outputfile = new File("icons/newestSave.jpeg");
ImageIO.write(img, "jpeg", outputfile);

这是 br.jpeg:http://i.imgur.com/w1dZogA.png

这是输出:http://i.imgur.com/MVIxiA7.jpg

输出应该是纯白色,因为程序应该将每个像素更改为 255、255、255。

【问题讨论】:

  • RGB 值 255、255、255 表示“全白”,而不是“纯黑”。
  • 我修复了我的帖子,但它仍然没有解释为什么输出是纯红色的。事实上,改变 b 的 rgb 值并没有改变任何东西。
  • setRGB() in java的可能重复
  • 我可以从您发布 imgur 的 PNG 图像中重现该问题。但是您的代码声称正在读取 JPG 图片。如果我将 PNG 保存为 JPG,它可以正常工作。它不能用作 PNG 的原因是因为您使用了一个索引颜色模型,其中只有蓝色和红色,所以它只能在输出中包含这些颜色。
  • 我以为是欧文的问题,但是我做了一个黑白的图像,并试图让整个图像变白但它不起作用,所以我认为它不是颜色模型。

标签: java image bufferedimage


【解决方案1】:

您的源图像是TYPE_BYTE_INDEXED类型(使用img.getType()显示类型),您需要将图像保存在类型:TYPE_3BYTE_BGR

BufferedImage i = null;
BufferedImage img = null;
try 
{
    i = ImageIO.read(new File("icons/br.jpeg"));
    img = new BufferedImage(i.getWidth(),i.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
}
catch (IOException e) 
{
}

//copy the image
img.getGraphics().drawImage(i, 0, 0, null);


for(int x = img.getWidth()-1; x >= 0; x--)
{
    for(int y = img.getHeight()-1; y >= 0; y--)
    {
        Color b = new Color(255, 255, 255);
        img.setRGB(x, y, b.getRGB());
    }
}

//Save New Image
File outputfile = new File("icons/newestSave.jpeg");
ImageIO.write(img, "jpeg", outputfile);

【讨论】:

  • 问题是 OP 没有读取 jpeg 文件,因为 jpeg 不支持索引颜色模型。如果 OP 正在读取 jpeg,就像代码所说的那样,这个问题就不会存在。
  • 起初我使用的是 .png 并且有完全相同的问题。我知道这与颜色模型有关,但我不知道如何更改它,甚至不知道颜色模型是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多