Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 图像打印颜色不正确_Java_Image_Colors_Graphics2d_Javax.imageio - Fatal编程技术网

Java 图像打印颜色不正确

Java 图像打印颜色不正确,java,image,colors,graphics2d,javax.imageio,Java,Image,Colors,Graphics2d,Javax.imageio,我试图从磁盘读取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.

我试图从磁盘读取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))

绘制的矩形为
灰色
颜色,而不是
绿色
。我做错了什么

如果源图像是灰度图像,则不太可能使用任何类型的颜色

相反,您需要创建第二个彩色的
buffereImage
,并将原始图像绘制到其中

 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中(基本上)就是这样做的

源图像是彩色图像吗?我想不是。有没有一种方法可以在阅读PIL时将其转换为彩色图像?不知道PIL。但是我会用
type_ARGB
类型创建第二个
缓冲区图像
,并在其上绘制原始图像,然后在
缓冲区图像
上绘制矩形,保存它……谢谢,如果你不介意的话,你能告诉我怎么做吗?我对java中的图像处理一无所知。我看到的所有示例都创建了一个
BufferdImage
像新的BufferedImage(800600,BufferedImage.TYPE_INT_RGB),但不是来自另一个
BufferedImage
。太棒了!这很有效。有一些输入错误:
iamge=new BufferedImage(image.getWidth(),image.getHeight(),BufferedImage.TYPE_ARGB)
;可能应该是
image=new BufferedImage(original.getWidth(),original.getHeight(),BufferedImage.TYPE\u INT\u ARGB)
。如果您想编辑。感谢您提供有关打字错误的信息;),很高兴能帮上忙