JME - Transformar byte[] em image

9 respostas
leonvian

Bom dia,

No código abaixo eu consigo converter um IMAGE em um array de bytes BYTE[].
Porém estou com problemas para convertê-lo novamente em IMAGE a partir de um array de bytes.

Alguem sabe uma maneira de fazer isso?

private byte[] imageToByte(Image image) {
        int size = image.getHeight() * image.getWidth();
        int[] imgRgbData = new int[size];
        byte[] imageData = null;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            DataOutputStream dos = new DataOutputStream(baos);
            try {
                image.getRGB(imgRgbData, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
                for (int i = 0; i < imgRgbData.length; i++) {
                    dos.writeByte(imgRgbData[i]);
                }
                imageData = baos.toByteArray();
            } finally {
                baos.close();
                dos.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return imageData;
    }

9 Respostas

Mikhas

Da uma olhada nos metodos da classe javax.imageio.ImageIO

erico_kl

O mais difícil você já fez…
pra converter de byte[] pra Image é bem mais simples:

byte[] foto = ...;
Image imgFoto = new ImageIcon(foto).getImage();
Scoobydoo
Tente isso Imagem
input  = SUAVARIAVEL.getBinaryStream();
                if (input != null) {
                    ByteArrayOutputStream output = new ByteArrayOutputStream();
                    byte[] rb = new byte[1024];
                    int ch = 0;
                    while ((ch = input.read(rb)) != -1) {
                        output.write(rb, 0, ch);
                    }
                    byte[] b = output.toByteArray();
                    input.close();
                    output.close();
                    Image img = Toolkit.getDefaultToolkit().createImage(b);
                    if (img != null) {
                      Icon Icone = (new ImageIcon(img.getScaledInstance(418, 241, WIDTH)));
                    }
                
            }
leonvian

hummm deu certo não.

Scoobydoo

input = SUAVARIAVEL.getBinaryStream(); Colocou sua imagem no local de Suavariavel ??

Voce quer exibir a imagem num label ??
Label.setImage(img);??

erico_kl

erico_kl:
O mais difícil você já fez…
pra converter de byte[] pra Image é bem mais simples:

byte[] foto = ...; Image imgFoto = new ImageIcon(foto).getImage();


tu fez isso?

leonvian

Lembrando que estamos programando para dispositivos móveis.
Não temos todos os recursos das outras edições.

Image imgFoto = new ImageIcon(foto).getImage();

Aqui deu problema no ImageIcon, apareceu um “cannot find Symbol”


Nesse código:

input  = SUAVARIAVEL.getBinaryStream();

if (input != null) {

ByteArrayOutputStream output = new ByteArrayOutputStream();

byte[] rb = new byte[1024];

int ch = 0;

while ((ch = input.read(rb)) != -1) {

output.write(rb, 0, ch);

}

byte[] b = output.toByteArray();

input.close();

output.close();

Image img = Toolkit.getDefaultToolkit().createImage(b);

if (img != null) {

Icon Icone = (new ImageIcon(img.getScaledInstance(418, 241, WIDTH)));

}

esse “input” seria um objeto de InputStream?
O “Icon” tambem não foi reconhecido, o netbeans me fez a sugestão de criar essa classe.

Eu fiz uma aplicação em canvas similar ao paint, em jme, consigo desenhar e salvar como array de bytes agora pretendo reabrir a imagem.

Obrigado pela ajuda.

leonvian

Desculpa.
Agora que eu vi que tinha uma área no forum especifica para jme.

Scoobydoo

Essa variavel Icon ta errada… foi mal… Mas é assim

No lugar se criar esse ICon vc seta sua imagem no Label Então…
LabelImagem.setIcon(new ImageIcon(img.getScaledInstance(X, Y, WIDTH)));

Defina o X e o Y

e sim… é InputStream

Criado 18 de fevereiro de 2010
Ultima resposta 19 de fev. de 2010
Respostas 9
Participantes 4