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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top