Сохранить изображение из JLabel без JFileChooser - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу сохранить изображение из JLabel в папку без JFileChooser. У меня есть такой метод

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 или другой формат. Каково лучшее решение для этой проблемы?

1 Ответ

0 голосов
/ 05 сентября 2018

Ваш код, кажется, объединяет несколько идей, но, кажется, ничего не достигает

Этот ...

ImageIcon ImageIcon = (ImageIcon)lblPhoto.getIcon();

и это ...

byte[] b = new byte[size];
out.write(b);

и это ...

ImageIO.write((RenderedImage)Image, "jpg", out);

Все выглядят как плохие идеи. Вы не должны слепо приводить объекты, и я не знаю, почему вы используете FileOutputStream для записи пустого массива байтов (длиной 0 байт) в файл.

Более "упрощенным" подходом было бы нарисовать Icon (который у вас есть / вы знаете) в BufferedImage (который поддерживает RenderedImage), а затем записать это через 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 null или нет, просто потому, что они могут не иметь назначенную фотографию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...