2015-08-26 3 views
0

Я пытаюсь прочитать файл изображения PNG с диска, нарисовать на нем прямоугольники и сохранить измененное изображение на диске. Вот код Scala:ImageIO не печатает правильный цвет

//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. Что я делаю не так?

+0

Является ли исходное изображение цветное изображение? – MadProgrammer

+0

Нет, я думаю. Есть ли способ конвертировать его в цветное изображение при чтении, как в PIL? – rivu

+0

Не знаю, что такое PIL. но я бы создал второй «BufferedImage» с типом «TYPE_ARGB» и нарисую на нем исходное изображение, а затем покрасьте прямоугольники в «BufferedImage», сохранив вместо этого ... – MadProgrammer

ответ

2

Если исходное изображение представляет собой изображение с серой шкалой, то маловероятно, что он будет способен использовать любой цвет любого вида.

Вместо этого вам необходимо создать вторую, цветную, 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

+0

Удивительный! Это работает. Есть некоторые опечатки: 'iamge = new BufferedImage (image.getWidth(), image.getHeight(), BufferedImage.TYPE_ARGB)'; вероятно, должно быть «image = new BufferedImage (original.getWidth(), original.getHeight(), BufferedImage.TYPE_INT_ARGB)'. Если вы хотите отредактировать. – rivu

+0

Спасибо за информацию о типографии;), рад, что это может помочь – MadProgrammer

Смежные вопросы