Tengo un TouchPoint clase que implementa Serializable y porque contiene Bitmap escribí writeObject y readObject para esa clase:decodeByteArray y copyPixelsToBuffer no funciona. volvió SkImageDecoder :: fábrica nula
private void writeObject(ObjectOutputStream oos) throws IOException {
long t1 = System.currentTimeMillis();
oos.defaultWriteObject();
if(_bmp!=null){
int bytes = _bmp.getWidth()*_bmp.getHeight()*4;
ByteBuffer buffer = ByteBuffer.allocate(bytes);
_bmp.copyPixelsToBuffer(buffer);
byte[] array = buffer.array();
oos.writeObject(array);
}
Log.v("PaintFX","Elapsed Time: "+(System.currentTimeMillis()-t1));
}
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{
ois.defaultReadObject();
byte[] data = (byte[]) ois.readObject();
if(data != null && data.length > 0){
_bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
}
}
El problema es que tengo
SkImageDecoder :: La fábrica devolvió nulo
Entonces, ¿cómo puedo solucionarlo? Sé que posible solución es cambiar writeObject() para
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
_bmp.compress(Bitmap.CompressFormat.PNG, 100, byteStream);
oos.writeObject(byteStream.toByteArray);
pero este método es más lento casi 10+ veces.
14ms- copyPixelsToBuffer ~ para la escritura de la imagen
- _bmp.compress ~ 160ms
ACTUALIZACIÓN entero de que el problema real es que después de
buffer.array();
Todo byte [] los elementos de la matriz son: 0
¿No recibe ningún otro mensaje de error? Quizás, 'int bytes = _bmp.getRowBytes() * _bmp.getHeight()' resolvería su problema. –
no, no recibo otros mensajes. eso no soluciona el problema Sin embargo, encuentro la manera de resolver esto. Voy a publicar una respuesta más tarde. – Cyberon