Como criar um arquivo BMP a partir de byte bruto [] em java
-
19-09-2019 - |
Pergunta
Eu tenho um aplicativo C ++ que se comunica com uma câmera e busca dados de imagem em bruto. Eu tenho então um byte [] em C ++, que quero enviar para Java com JNI.
No entanto, preciso converter o byte bruto [] em um formato de arquivo real (.bmp foi minha primeira escolha). Eu posso fazer isso facilmente se escrevê-lo de C ++ para um arquivo no DRIVIVE, usando o BitmapFileInfo e o BitMapheaderinfo, mas não sei como seria enviar todo o formato para Java.
Então pensei em enviar apenas os dados de byte bruto [] usando o JNI e depois convertê -los para .bmp, mas não consigo encontrar nenhuma boa biblioteca para fazer isso em Java.
Qual seria a minha melhor escolha? Convertendo a imagem em C ++ e depois enviando -a usando JNI ou envie os dados brutos para Java e depois converta -os para .bmp? Como eu mais fácil conseguiria isso?
Solução
São apenas duas linhas no Java 1.5:
BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));
O Java (no Windows) sabe como exportar JPG, PNG e BMP até onde eu sei.
Outras dicas
Não há necessidade de fazer nada disso. Transforme a matriz de bytes em um insputStream e alimente -o para imageio.read ();
public Image getImageFromByteArray(byte[] byteArray){
InputStream is = new ByteArrayInputStream(byteArray);
return ImageIO.read(is);
}
Isso cria um objeto de imagem da sua matriz de bytes, que é muito trivial para exibir dentro de um componente GUI. Se você deseja salvá -lo, também pode usar a classe Imageio para isso.
public void saveImage(Image img, String fileFormat, File f){
ImageIO.write(img, fileFormat, f);
}
Se você sabe escrever como .bmp
Para um arquivo, você pode usar (quase) o mesmo código para gravar em um buffer de memória. Esse buffer de memória que você pode enviar para Java e decodificar o formato como Stroboskop ou Markus Koivisto mencionado. Se você editou sua pergunta para incluir a maneira como você escreve os dados para um .bmp
Arquivo, eu poderia sugerir como convertê-lo em uma operação na memória.