|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: May 2009
Messaggi: 12
|
[Java] Convertire flusso dati grezzo byte[] RGB in BufferedImage
Buongiorno,
ho costruito una semplice applicazione che scatta foto da remoto utilizzando una webcam e Java media framework. Discretizzando il flusso del player con frame grabbing Control viene ritornata una immagine di tipo buffer che ho convertito in byte[] e inviato sulla rete al client. Vorrei sapere se c'è un modo per passare ad una BufferedImage che possa visualizzare in un JPanel. Oltre alla immagine ovviamente spedisco le informazioni sulla dimensione in modo da poterla ricostruire. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Dai un'occhiata a javax.imageio.ImageIO : mette a disposizione due metodi 'read' che accettano come parametro un URL o un ImageInputStream e si arrangiano a trovare un ImageReader adatto a leggere l'immagine al dato URL/ImageInputStream e restituirla sottoforma di java.awt.image.BufferedImage.
Se no devi crearti la BufferedImage vuota, conoscendone le dimensioni e il ColorModel adatto, per poi ottenerne il Graphics2D su cui disegnare i singoli pixel...
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: May 2009
Messaggi: 12
|
grazie mille per la risposta.
ho risolto guardando il link: http://stackoverflow.com/questions/1...age-in-java-se ovvero: BufferedImage img=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); for(int r=0; r<height; r++) for(int c=0; c<width; c++) { int index=r*width+c; int red=colors[index] & 0xFF; int green=colors[index+1] & 0xFF; int blue=colors[index+2] & 0xFF; int rgb = (red << 16) | (green << 8) | blue; img.setRGB(c, r, rgb); } probabilmente i canali mi arrivano nel formato BGR visto che mi son trovato le foto di colore bluastro (stile avatar) e invertendo i canali ho ritrovato i colori corretti. L'unico problema è che la foto stampata è sottosopra (invertita verticalmente)...ho invertito i valori dei pixel all'interno dell int[] (dove ogni valore corrisponde ad un int a 32 bit alfa-RGB) costruito ma ora me la ritrovo nel verso giusto ma speculare. Non ho ben capito a cosa sia dovuto. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:18.



















