Java JFileChooser .png файлы в байтовое [] черное изображение - PullRequest
0 голосов
/ 25 сентября 2018

Мне нужно загрузить изображение .png на сервер и показать его в графическом интерфейсе Swing, я использую JFileChooser, пользователь выбирает изображение .png, и оно сохраняется в байте [].Позже, когда я пытаюсь отобразить изображение, оно все черное.Это не происходит с файлами .jpg.У меня проблема с прозрачностью изображений .png.Это мой код:

Сохранение изображения в байт []:

public byte[] AvatarToByte(String url){
    byte[] data = null;
    String extension = "";
    try{            
        BufferedImage bImage = ImageIO.read(new File(url));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        if(url.toString().toLowerCase().contains(".png")){
            extension = "png";
        }else{
            extension = "jpg";
        }
        ImageIO.write(bImage, extension, bos );
        data = bos.toByteArray();
    }catch(Exception e){
        e.printStackTrace();
    }
    return data;
}

От байта [] до свинга Java:

public ByteToAvatar(byte[] data){
    BufferedImage img = null;                       
    img = ImageIO.read(new ByteArrayInputStream(data));

    JLabel lblURL = new JLabel();
    lblURL.setBorder(new LineBorder(Color.GRAY));
    lblURL.setBackground(SystemColor.controlLtHighlight);
    lblURL.setBounds(10, 10, 80, 80);           
    lblURL.setIcon(Resize(img));
}

Размер:

private ImageIcon Resize(Image img){
    Image newImg = img.getScaledInstance(80, 80, Image.SCALE_SMOOTH);
    ImageIcon image = new ImageIcon(newImg);
    return image;
}

edit: попытался отобразить изображение перед изменением размера, и оно отображается правильно.В Resize (Image img) должно быть что-то не так.

1 Ответ

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

Я проверил ваш код, и он работает без проблем.

import java.awt.Color;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.SystemColor;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.LineBorder;


public class Test {
    static GraphicsConfiguration gc;
    static JFrame frame;

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        frame= new JFrame(gc);  
        frame.setSize(200, 200);
        frame.setVisible(true);

        byte[] b=  AvatarToByte("e:/dog.png");
        ByteToAvatar(b);
        System.out.println();
    }

    public static byte[] AvatarToByte(String url){
        byte[] data = null;
        String extension = "";
        try{            
        BufferedImage bImage = ImageIO.read(new File(url));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        if(url.toString().toLowerCase().contains(".png")){
            extension = "png";
        }else{
            extension = "jpg";
        }
        ImageIO.write(bImage, extension, bos );
        data = bos.toByteArray();
        }catch(Exception e){
        e.printStackTrace();
        }
        return data;
    }

    public static void ByteToAvatar(byte[] data) throws IOException{
        BufferedImage img = null;                       
        img = ImageIO.read(new ByteArrayInputStream(data));

        JLabel lblURL = new JLabel();
        lblURL.setBorder(new LineBorder(Color.GRAY));
        lblURL.setBackground(SystemColor.controlLtHighlight);
        lblURL.setBounds(10, 10, 80, 80);           
        lblURL.setIcon(Resize(img));

        frame.getContentPane().add(lblURL);
        frame.pack();
    }

    private static ImageIcon Resize(Image img){
        Image newImg = img.getScaledInstance(80, 80, Image.SCALE_SMOOTH);
        ImageIcon image = new ImageIcon(newImg);
        return image;
    }
}

...