Restituisce un'immagine gif da un metodo
Domanda
Sto creando un'applicazione in Java che farà parte di un'applicazione esterna. La mia applicazione contiene una finestra che mostra alcuni poligoni e cose del genere. L'applicazione esterna deve ottenere l'immagine del viewport in formato gif. Per questo chiama un metodo in un'interfaccia (implementata dalla mia applicazione) e la mia applicazione restituisce l'immagine. L'applicazione esterna deve archiviare l'immagine nel database (o qualcosa ad esso correlato di cui non devo preoccuparmi).
La mia domanda è: - Quale dovrebbe essere il tipo di contenitore di dati dell'immagine quando la mia applicazione lo invia all'applicazione esterna? Voglio dire quale dovrebbe essere il tipo di ritorno del metodo? Attualmente la mia classe di codificatore gif restituisce un array di byte. C'è qualche altra opzione "migliore"?
Soluzione
Un array di byte potrebbe essere appropriato se ti aspetti che le GIF siano piccole, ma potresti prendere in considerazione l'uso di un OutputStream
in modo da poter trasmettere i bit in modo più efficiente.
Anche se oggi restituissi un ByteArrayOutputStream
completamente popolato, ciò ti consentirebbe di modificare l'implementazione in futuro senza influire sul codice cilent.
Altri suggerimenti
Un tipo di ritorno più intuitivo potrebbe essere java.awt.Image.
Ecco alcuni esempi: http://www.google.com/codesearch? q = java + gif + immagine & amp; hl = it & amp; btnG = Ricerca + Codice
Se la tua 'applicazione' sta effettivamente chiamando un metodo Java, allora dovrebbe capire i tipi di ritorno Java e dovresti restituire java.awt.image.
Se lo fai attraverso un qualche tipo di procedura remota che non riesce a capire i tipi Java, restituirei un array di byte e lascerei decodificare l'app di ricezione.
Creerei due metodi:
- Il primo metodo crea l'immagine e restituisce un
java.awt.Image
. Qui puoi inserire la parte di disegno del tuo metodo. - Il secondo metodo crea una rappresentazione gif di
java.awt.Image
come richiesto dall'applicazione esterna. Dovrebbe restituireOutputStream
come già suggerito.