Converter BYTE[] para IMAGE

21 respostas
L

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;   
  }

21 Respostas

G

seria isto?

Toolkit.getDefaultToolkit().createImage(imagemOriginal);

onde imagemOriginal é o seu vetor de bytes

L

qual é a biblioteca para usar esse Toolkit.getDefaultToolkit()?

Aqui no meu projeto deu “cannot find symbol”

G

import java.awt.Toolkit

P

Hahaha…é cada uma…

E gilson…não aprende mesmo…

L

Como eu recrio essa imagem a partir de um array de bytes?

lembrando que estou utilizando a edição jme…

G

Não entendi o seu comentário boone. poderia se explicar melhor?

G

desculpe…não tinha visto que era JME…foi mal

L

sem problemas.

G

leonvian nunca programei em JME, mas como nosso amigo boone não se prontificou em ajudar…

tente dar uma olhada neste endereço.
http://www.java2s.com/Code/Java/J2ME/ImageLoader.htm
atente para a linha

abraços

L

Vou dar uma olhada.
Brigadão pelo link.

G

avise se der certo ok?

F

Vamo la galera…vamos tentar procurar na documentação da api antes de postar dúvidas…

dá uma olhada nesse link:

http://java.sun.com/javame/reference/apis/jsr118/

Classe Image…

J

Image.createImage(byte[], 0, byte[].length);

L

Ah… acho que o meu metodo pra transformar a IMAGE em um BYTE[] apesar de estar retornando um byte deve estar errado.
Tentei essas metodos pra recriar a imagem mas não deu certo.

Sempre acontece alguma Exception.

P

gilson, finalmente percebeste a caquinha.

leonvian, o array esperado por createImage não é qualquer array e sim um no formato especificado no javadoc (de novo !..este javadoc é completo mesmo hein…) da classe Image,método createImage.

J

leonvian:
Ah… acho que o meu metodo pra transformar a IMAGE em um BYTE[] apesar de estar retornando um byte deve estar errado.
Tentei essas metodos pra recriar a imagem mas não deu certo.

Sempre acontece alguma Exception.

Como vc está fazendo?
E qual exception é lançada?

L

quando eu tento assim: Image.createImage(byte[], 0, byte[].length); aparece um IlegalArgumentException
quando eu tento assim: Image.createImage(inputStream); aparece um IOException

Assim é feita a transformação de imagem para byte.

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;
    }
J

leonvian:
quando eu tento assim: Image.createImage(byte[], 0, byte[].length); aparece um IlegalArgumentException
quando eu tento assim: Image.createImage(inputStream); aparece um IOException

Assim é feita a transformação de imagem para byte.

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; }

Cara, vc não está fazendo exatamente assim né?
Image.createImage(byte[], 0, byte[].length);

Pq esse byte[] tem que ser o retorno desse teu método…

L

Pois é… isso eu sei.

É tipo byte[] byte = imageToByte(image);

Image.createImage(byte[], 0, byte[].length);

J

leonvian:
Pois é… isso eu sei.

É tipo byte[] byte = imageToByte(image);

Image.createImage(byte[], 0, byte[].length);

Não cara, tira os colchetes

byte[] bytesImg = imageToByte(image); Image.createImage(bytesImg, 0, bytesImg.length);

L

pois é… No código ta certinho, eu escrevi correndo aquele.

byte[] bytesImg = imageToByte(image);
Image.createImage(bytesImg, 0, bytesImg.length);

O fato é que tem algo errado no método que faz a conversão de imagem para Byte[].

se não daria certo esse Image.createImage(bytesImg, 0, bytesImg.length);

Criado 18 de fevereiro de 2010
Ultima resposta 19 de fev. de 2010
Respostas 21
Participantes 5