我想在不使用JFileChooser的情况下将图像从JLabel保存到Folder。我有这样的方法
private void SaveImage(){
Icon icon = lblPhoto.getIcon();
BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_RGB);
ImageIcon ImageIcon = (ImageIcon)lblPhoto.getIcon();
OutputStream out = null;
int size =0;
Image Image = ImageIcon.getImage();
try {
out = new FileOutputStream("\\RekamMedis\\Photo\\"+txtNama.getText().trim()+".jpg");
byte[] b = new byte[size];
out.write(b);
ImageIO.write((RenderedImage)Image, "jpg", out);
}
catch (Exception e) {
Logger.getLogger(lblPhoto.getClass().getName()).log(Level.SEVERE, null, e);
}
}
但是此方法显示为空的image.jpg或其他格式。解决此问题的最佳方法是什么?
答案 0 :(得分:2)
您的代码似乎围绕着一些想法反弹,但似乎并没有实现任何目的
这个...
ImageIcon ImageIcon = (ImageIcon)lblPhoto.getIcon();
还有这个...
byte[] b = new byte[size];
out.write(b);
还有这个...
ImageIO.write((RenderedImage)Image, "jpg", out);
所有看起来都是坏主意。您不应该盲目地投射对象,我也不知道为什么要使用FileOutputStream
向文件中写入一个空的字节数组(长度为0字节)。
一种更“简单”的方法是将Icon
(您已经知道)涂成BufferedImage
(支持RenderedImage
),然后通过{{ 1}}变成ImageIO
,类似...
File
我还要添加一项检查,以查看Icon icon = lblPhoto.getIcon();
BufferedImage bi = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
icon.paintIcon(lblPhoto, g2d, 0, 0);
g2d.dispose();
File file = new File("\\RekamMedis\\Photo\\"+txtNama.getText().trim()+".jpg");
ImageIO.write(bi, "jpg", file);
是否为icon
,只是因为他们可能没有分配照片