2013-05-04 3 views
4

Я пишу библиотеку изображений для удовольствия, и я столкнулся с проблемой, которую я не могу решить. Класс довольно прост: сделайте снимок, обработайте его, покажите его через JFrame и, наконец, сохраните его как BufferedImage (javax.imageio.ImageIO). Вот что моя картина выглядит через JFrame (это мой класс ColorEnhance ... на туманности Друстан):Java Imagio.write() меняет качество во время сохранения

The image as seen from the JFrame

Вот что сохраненная версия (а PNG, но все типы ImageIO.write() поддерживает выглядят одинаково):

The image as seen after it has been saved

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

public void writeToFile(BufferedImage finalPic, String nameToAppend) 
{ 
    String temp=fileName.replace(".", nameToAppend+"."); 
    String ext=fileName.substring(fileName.indexOf(".")+1); 
    File file=new File(temp); 
    try 
    { 
     ImageIO.write(finalPic, ext.toUpperCase(), file); 
     System.out.println("Successfully saved to: "+temp); 
    } catch (Exception e) { e.getMessage(); } 
} 

public void displayImage(String titleName) 
{ 
    ImageIcon icon = new ImageIcon(newPic); 
    JFrame frame = new JFrame(titleName); 
    JLabel label = new JLabel(icon); 
    label.setIcon(icon); 
    frame.getContentPane().add(label, BorderLayout.CENTER); 
    frame.setSize(WIDTH, HEIGHT+22); 
    frame.setVisible(true); 
} 

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

+0

I увеличили репутацию, разместили необходимые изображения для лучшего понимания проблемы. –

+0

Эти фрагменты кода даже не указывают, какой тип изображения используется! Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

+0

Хорошо, спасибо, Андрей, я думаю, я должен был сделать более понятным, что я исчерпал все типы изображений, которые ImageIO.write() поддерживает с одинаковыми результатами каждый раз. Я забыл оставить остальную часть кода, потому что я знаю, что ошибка лежит где-то в взаимодействии ImageIO или BufferedImage (я не слишком знаком с ними). Если исправление не может быть найдено, я смогу с ним жить, а спагетти патч мой путь вокруг него каким-то образом ... Bottom Line: есть ли способ, который я могу сделать, чтобы мой сохраненный файл выглядел точно так же, как вывод через JFrame? – JFakult

ответ

1

Попробуйте использовать PNGImageEncoder из Apache XML Graphics Commons:

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); 
PNGImageEncoder encoder = new PNGImageEncoder(new FileOutputStream("file.png"), null); 
encoder.encode((RenderedImage) image); 
Смежные вопросы