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;
}
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.
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.
[quote=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.
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;
}
[quote=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;
}
[/quote]
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…