【发布时间】:2017-11-30 23:33:33
【问题描述】:
我写了一个修改图片的程序。
首先,我得到图像,并像这样得到它的绘图上下文:
BufferedImage image;
try {
image = ImageIO.read(inputFile);
} catch (IOException ioe) { /* exception handling ... */ }
Graphics g = image.createGraphics();
然后我像这样修改图像:
for (int x = 0; x < image.getWidth(); x++) {
for (int y = 0; y < image.getHeight(); y++) {
g.setColor( /* calculate color ... */ );
g.fillRect(x, y, 1, 1);
}
}
修改完图片后,我保存图片如下:
try {
ImageIO.write(image, "PNG", save.getSelectedFile());
} catch (IOException ioe) { /* exception handling ... */ }
现在大部分时间都可以正常工作。
但是,当我尝试重新着色此纹理时
到这里
我得到了这个:
不过,在调试器内部,Graphics 的颜色是我想要的粉色阴影。
cmets 似乎暗示用户打开的图像可能有一些颜色限制,并且由于我正在绘制相同的图像,因此我的程序必须遵守这些限制。示例图像似乎是相当灰度的,显然它的位深度是 8 位。所以也许我在上面画的粉红色被转换为灰度,因为图像必须保持 8 位?
【问题讨论】:
-
有没有机会提供一个设置(即minimal reproducible example 和示例图片),以便可以重现此问题?
-
颜色模型可能不支持您使用的颜色
-
@Marco13 我在我的问题中添加了一个示例。
-
@MadProgrammer 你的意思是我必须处理读取 BufferedImage 的图像的限制吗?就像从 GIF 中读取的一样,我必须使用它附带的 256 种颜色?
-
我会更担心目标颜色模型
标签: java graphics bufferedimage