Come creare un file BMP da raw byte[] in Java
-
19-09-2019 - |
Domanda
Ho una applicazione C++, che comunica con una macchina fotografica e recupera immagini raw-data.Poi ho un Byte[] in C++, che voglio inviare a Java con JNI.
Tuttavia, ho bisogno di convertire il raw Byte[] a un vero e proprio formato di file(.bmp è stato la mia prima scelta).Posso facilmente fare questo se lo scrivo in C++ di un file sul disco rigido, utilizzando BITMAPFILEINFO e BITMAPHEADERINFO, ma non so come andare circa l'invio di tutto il formato Java.
Poi ho pensato di inviare solo il raw di dati byte[] tramite JNI e poi convertirlo .bmp, ma non riesco a trovare qualsiasi buona libreria per farlo in Java.
Che cosa sarebbe la mia scelta migliore?Convertire l'immagine in C++ e poi inviandolo tramite JNI o inviare i dati GREZZI per Java e poi convertire .bmp?Come sarebbe più facile raggiungere questo obiettivo?
Soluzione
Solo due righe in Java 1.5:
BufferedImage image = ImageIO.read( new ByteArrayInputStream( byteArray ) );
ImageIO.write(image, "BMP", new File("filename.bmp"));
Java (su Windows) sa come esportare jpg, png e bmp per quanto ne so.
Altri suggerimenti
Non c'è bisogno di fare nulla di tutto ciò.Ruotare la matrice di byte in un InputStream e di alimentazione che di ImageIO.read();
public Image getImageFromByteArray(byte[] byteArray){
InputStream is = new ByteArrayInputStream(byteArray);
return ImageIO.read(is);
}
Questo crea un oggetto Immagine dal tuo array di byte, che è poi molto banale, infatti, di visualizzare all'interno di un componente gui.Se si vuole risparmiare, è possibile utilizzare il ImageIO classe per questo.
public void saveImage(Image img, String fileFormat, File f){
ImageIO.write(img, fileFormat, f);
}
Se sai come scrivere come .bmp
per un file, allora è possibile utilizzare (quasi) lo stesso codice per la scrittura in un buffer di memoria, invece.Che il buffer di memoria è possibile spedire oltre a Java, e per decodificare il formato come Stroboskop o Markus Koivisto menzionato.Se hai modificato la tua domanda per includere il modo di scrivere i dati in un .bmp
file, mi potrebbe suggerire come convertire in un'operazione di memoria.