android-so speichern Sie eine bitmap - buggy-code
Ich versuche zu serialisieren einer Klasse in die ich eine bitmap-variable. Hier ist der code, dass ist ein bisschen Arbeit.... Ich brauche Hilfe, um herauszufinden, was ist immer noch falsch.....
private Bitmap myVideoScreenshotBm;
private void writeObject(ObjectOutputStream out) throws IOException{
out.writeInt(myVideoScreenshotBm.getRowBytes());
out.writeInt(myVideoScreenshotBm.getHeight());
out.writeInt(myVideoScreenshotBm.getWidth());
int bmSize = myVideoScreenshotBm.getHeight() * myVideoScreenshotBm.getRowBytes();
ByteBuffer dst= ByteBuffer.allocate(bmSize);
myVideoScreenshotBm.copyPixelsToBuffer(dst);
byte[] bytesar=new byte[bmSize];
dst.position(0);
dst.get(bytesar);
out.write(bytesar);
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
int nbRowBytes=in.readInt();
int height=in.readInt();
int width=in.readInt();
//
int bmSize = nbRowBytes * height;
byte[] toread= new byte[bmSize];
in.read(toread, 0, toread.length);
ByteBuffer dst= ByteBuffer.allocate(bmSize);
dst.put(toread);
dst.position(0);
myVideoScreenshotBm=Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
myVideoScreenshotBm.copyPixelsFromBuffer(dst);
}
Ich bin nicht immer ein Fehler sein, aber die bitmap Im immer falsch sind... auch, ich weiß nicht, wie zu wissen, welche Bitmap.Config-flag eignet sich... wie zu wissen ?
Hilfe ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist der code, der für eine Serialisierung mit memory-Optimierung. Im mit einem statischen Puffer, der wächst auf der größten bitmap-Größe, die ich wiederverwenden jeder Zeit.
}
Nicht unbedingt redundant array + alle Logik um + verwenden Sie die entsprechenden Methoden zur Manipulation der Puffer + utf ist besser für Streicher und vermeiden Sie die casts + Synchronisation (es ist aber nicht thread-sicher sowieso) :
Die Dinge zu vereinfachen, können Sie standard-Serialisierung für alle andere Felder als die bitmap. Markieren Sie einfach die bitmap als vorübergehend, und verwenden Sie Sie heraus.defaultWriteObject(); und in.defaultReadObject();. Das ist wirklich aufräumt code: