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?

Foi útil?

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.

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