Java ImagIO.write() 在保存期间改变质量

JFa*_*ult 5 java graphics image save

我正在编写一个图像库是为了好玩,但我遇到了一个我似乎无法解决的问题。该类非常简单:拍摄一张照片,对其进行处理,通过 JFrame 显示它,最后将其保存为 BufferedImage (javax.imageio.ImageIO)。这是我的图片通过 JFrame 的样子(这是我的 ColorEnhance 类......在 Drustan 星云上):

从 JFrame 看到的图像

这是保存的版本(一个 png,但 ImageIO.write() 支持的所有类型看起来都一样):

保存后看到的图像

我不确定变化发生在哪里,但是当我通过模糊方法运行它时,整行都从 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);
}
Run Code Online (Sandbox Code Playgroud)

最后一件事是,保存对某些处理类的效果比其他处理类更好,如果您需要查看更多代码,请询问,谢谢

BLu*_*NiX 1

尝试使用PNGImageEncoderApache 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);
Run Code Online (Sandbox Code Playgroud)