【发布时间】:2017-03-13 02:26:58
【问题描述】:
尝试做一些相对简单的事情,给定一张 512x512 png 的地图,我正在尝试绘制点。我的代码相当简单,我尝试使用 setRGB 函数和 createGraphics 函数返回的 Graphics2D 对象。我必须忽略一些简单的事情。编辑:我应该提一下,我不是要创建新的 BufferedImage,而是要修改现有的 BufferedImage,因为连续的库调用将继续修改我正在使用的 BufferedImage。 (在下面的示例代码中,我从一个文件中读取了 BufferedImage,这是一种复制问题的简单方法。
File outputImage = new File("before.png");
BufferedImage img = ImageIO.read(outputImage);
img.setRGB(255, 255, new Color(0f, 1f, 0).getRGB());
File after = new File("after.png");
ImageIO.write(img, "png", after);
如果放大生成的像素,它不是绿色,而是一些更深的灰色。由于这种行为与 Graphics2D 一致,我希望解决这个问题也能解决这个问题。
【问题讨论】:
-
问题是原始图像使用的是
IndexColorModel(如果您愿意,也可以使用颜色图或“调色板”)。没有与您指定的颜色匹配的绿色,因此颜色模型会进行查找以获取与您指定的颜色“最接近”的颜色。 @camickr 的解决方案应该可以正常工作,尽管问题在于颜色 model 而不是颜色 space (它们都是 RGB)。 ;-)
标签: java bufferedimage graphics2d javax.imageio