Pergunta

Eu quero comprimir uma imagem usando codificador JPEG e em vez de escrevê-lo em um arquivo eu quero passar os dados compactados para outro aplicativo. Meu problema é que eu pode comprimir os dados, mas não sei como conseguir que os dados de imagem comprimidos. Estou usando este código:

 out = new FileOutputStream ( filename );
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
 JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi );
 param.setQuality ( 0.3f, false );  
 encoder.setJPEGEncodeParam ( param );
 encoder.encode ( bi );
 out.close();
Foi útil?

Solução

A ByteArrayOutputStream vai dar-lhe acesso aos bytes.

 ByteArrayOutputStream out = new ByteArrayOutputStream (  );
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
 JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi);
 param.setQuality ( 0.3f, false );  
 encoder.setJPEGEncodeParam ( param );
 encoder.encode (bi);
 out.close(); // a no-op on ByteArrayOutputStream
 byte[] data = out.toByteArray();

Outras dicas

Use um ByteArrayOutputStream em vez de um FileOutputStream. Em seguida, você pode obter o bytes via toByteArray().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top