Serializableを実装するクラスTouchPointがあり、ビットマップが含まれているため、そのクラスのwriteObjectとreadObjectを記述しました。
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);
}
}
問題は私が得ることです
SkImageDecoder::Factoryがnullを返しました
では、どうすれば修正できますか。考えられる解決策は、writeObject()を次のように変更することです。
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
_bmp.compress(Bitmap.CompressFormat.PNG, 100, byteStream);
oos.writeObject(byteStream.toByteArray);
しかし、この方法はほぼ10倍以上遅くなります。
- copyPixelsToBuffer〜14ms画像の書き込み
- _bmp.compress〜160ms
更新 実際の問題はその後の問題であることを確認してください
buffer.array();
すべてのbyte[]配列要素は次のとおりです:0