2012-04-03 4 views
4

Ich entwickle eine Android-App, die ein Quiz ist. Auf der anderen Seite entwickle ich ein Desktop-Tool, das komplett auf Swing basiert. Das Desktop-Tool wird verwendet, um die Fragen des Quiz einzufügen und erzeugt eine serialisierte Objektdatei, die alle Fragen enthält. Ich habe java.awt.Image verwendet, um ein Bild zu halten, das mit einer Frage verknüpft ist.Was ist der beste Weg, um ein Bild (kompatibel mit Swing) von Java zu Android zu serialisieren?

Leider, wenn ich mit der Entwicklung des Desktop-Tools fertig bin und auf die Android-Seite gehe, habe ich herausgefunden, dass Android keine java.awt.Image hat. Also meine Frage ist, ist es sowieso, die java.awt.Image innerhalb der Android App einzuschließen? oder gibt es eine andere Klasse in Java und Android, die sich mit Image beschäftigt, abgesehen von der Unterstützung der Swing-Komponenten? Oder gibt es eine Alternative, um das Problem zu lösen?

Notizen: Sie fragen sich vielleicht, warum ich das Objekt serialisieren und nicht nur die Fragen aus XML oder Datenbank abrufen. Das ist, weil ich eine Baumdatenstruktur als Kategorien der Fragen haben muss; Jede Kategorie enthält eine Liste von Fragen neben einer Unterkategorie.

Antwort

8

ist die Lösung: Verwenden Sie BufferedImage auf Java-Seite und konvertieren es Array Byte, dann auf der Android Seite erhalten Sie die Byte-Array und wandelt es in Bitmap.

Java Seite:

public static byte[] imageToByteArray(BufferedImage image) throws IOException 
{ 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageIO.write(image, "png", baos); 
    return baos.toByteArray(); 
} 

/* 
public static BufferedImage byteArrayToImage(byte[] imageArray) throws IOException 
{ 
    return ImageIO.read(new ByteArrayInputStream(imageArray)); 
} 
*/ 

Android Seite:

BitmapFactory.Options opt = new BitmapFactory.Options(); 
opt.inDither = true; 
opt.inPreferredConfig = Bitmap.Config.ARGB_8888; 
byte[] imageByteArray = getImageByteArray(); 
Bitmap bitmap = BitmapFactory.decodeByteArray(imageByteArray, 0, imageByteArray.length, opt); 
imageView.setImageBitmap(bitmap); 
+0

+1 für die Implementierung. – StanislavL

3

Verwenden Sie ImageIO, um das Bild in "PNG" oder "JPG" zu schreiben. z.B. Hier http://docs.oracle.com/javase/tutorial/2d/images/saveimage.html

+0

Ich möchte das Bild serialisiert werden nicht als Bilddatei zu speichern. –

+2

Speichern eines Bildes als Datei ** ist ** Serialisierung. Gibt es im 'awt.Image' zusätzliche Informationen, die Sie durch Speichern in einem gemeinsamen Format verlieren würden? – japreiss

+1

@japreiss Nein. Aber ich möchte nur jede/jede Frage mit einem Bild verbinden. Anstatt viele Bilddateien zu speichern, denke ich daran, eine Bildinstanzvariable innerhalb der Frageklasse zu verwenden, die ein tatsächliches Bild enthält. –

Verwandte Themen