【问题标题】:ImageIO not printing proper colorImageIO 没有打印正确的颜色
【发布时间】:2015-08-26 02:56:13
【问题描述】:

我正在尝试从磁盘读取 PNG 图像文件,在其上绘制一些矩形并将修改后的图像保存在磁盘上。这是scala代码:

//l is a list of Rectangle objects of the form (x1,x2,y1,y2)

val image = ImageIO.read(sourceimage);
val graph=image.createGraphics()
graph.setColor(Color.GREEN)
l.foreach(x=>graph.draw(new java.awt.Rectangle(x.x1,x.y1,x.x2-x.x1,x.y2-x.y1)))
graph.dispose()
ImageIO.write(image,"png",new File(destimage))

矩形被绘制,但颜色为GREY,而不是GREEN。我究竟做错了什么?

【问题讨论】:

  • 源图像是彩色图像吗?
  • 不,我猜。有没有办法在 PIL 中读取时将其转换为彩色图像?
  • 不知道 PIL。但我会创建第二个BufferedImage 类型为TYPE_ARGB 并将原始图像绘制到它,然后将矩形绘制到BufferedImage,而不是保存它...
  • 谢谢,如果你不介意的话,你能告诉我怎么做吗?我对java中的图像处理一无所知。我看到的所有示例都创建了一个 BufferdImage,例如 new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB),但不是来自另一个 BufferedImage

标签: java image colors graphics2d javax.imageio


【解决方案1】:

如果源图像是灰度图像,那么它不可能使用任何颜色。

相反,您需要创建第二个带颜色的BufferedImage 并将原件绘制到它上面。

 BufferedImage original = ImageIO.read(sourceimage);
 BufferedImage iamge = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
 Graphics2D g2d = image.createGraphics();
 g2d.drawImage(original, 0, 0, null);
 // Continue with what you have

抱歉,我没有使用 PIL 的经验,但这就是您(基本上)在纯 Java 中的做法

【讨论】:

  • 太棒了!这行得通。有一些错别字:iamge=new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_ARGB);应该是image=new BufferedImage(original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_ARGB)。如果你想编辑。
  • 感谢您提供有关拼写错误的信息 ;),很高兴它可以提供帮助
猜你喜欢
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 2013-08-19
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多