Sto cercando di serializzare una classe in cui ho una variabile bitmap. Ecco il codice che è un po 'di lavoro .... Ho bisogno di aiuto per scoprire che cosa è ancora sbagliata .....android come salvare un bitmap - codice buggy
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);
}
Im non sempre un errore, ma la bitmap Im ottenendo sono sbagliato ... inoltre, non so come riconoscere quale flag Bitmap.Config sia adatto ... come sapere?
aiuto?
Sono un novizio nel mondo Java/Android e ho implementato il codice di esempio per la mia classe. Ha anche alcune proprietà di tipi primitivi e una proprietà di tipo Bitmap. Tuttavia, nel metodo readObject ottengo una OptionalDataException quando provo a leggere la prima proprietà, es. "imageSource = (String) in.readObject();" Non ho idea del perché questo stia accadendo - qualsiasi idea sarebbe molto apprezzata. Grazie ... – codedog
Vedo solo due motivi possibili. Innanzitutto, l'eccezione stessa ti dice: "Segnala che la classe ObjectInputStream ha incontrato un tipo primitivo (int, char, ecc.) Invece di un'istanza dell'oggetto nel flusso di input." – Fabien
Secondo. Potrebbe essere che non stai leggendo i dati nello stesso ordine in cui li hai scritti nell'oggetto serializzato. Stai attento a rispettare l'ordine ... prima scrissi, prima di leggere. – Fabien