0
我有一個畫布我畫,我試圖把位圖,將其轉換爲一個字節數組,並將其保存到一個文件序列化。然後再打開,反序列化,並將位圖應用回畫布。在下面的代碼中,除了在畫布上應用位圖時,一切看起來都不錯。有人可以告訴我哪裏出錯了。畫布位圖到字節數組和讀取它的麻煩
public byte[] getCanvasData(){
ByteArrayOutputStream bos = new ByteArrayOutputStream();
mBitmap.compress(CompressFormat.PNG, 0, bos);
byte[] bitmapdata = bos.toByteArray();
return bitmapdata;
}
public void setCanvasData(byte[] canvasData, int w, int h){
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mBitmap.eraseColor(0x00000000);
mCanvas = new Canvas(mBitmap);
mCanvas.drawBitmap(BitmapFactory.decodeByteArray(canvasData , 0, canvasData.length).copy(Bitmap.Config.ARGB_8888, true), 0, 0, null);
}
增加了一些額外的代碼可能有點幫助
public void readInSerialisable() throws IOException
{
FileInputStream fileIn = new FileInputStream("/sdcard/theBKup.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
try
{
BookData book = (BookData) in.readObject();
pages.clear();
canvasContainer.removeAllViews();
for (int i = 0; i < book.getBook().size(); i++){
Log.d("CREATION", "LOADING PAGE " + i);
pages.add(new Canvas2(context, book.getPageAt(i), canvasContainer.getWidth(), canvasContainer.getHeight()));
}
canvasContainer.addView(pages.get(page), new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.FILL_PARENT, AbsoluteLayout.LayoutParams.FILL_PARENT, 0, 0));
updatePagination();
Log.d("CREATION", "Updated Pagination");
}
catch (Exception exc)
{
System.out.println("didnt work");
exc.printStackTrace();
}
}
BookData - Serializable類包含我的所有數據,簡單的獲取/設置有
的onDraw方法
@Override
protected void onDraw(Canvas canvas) {
Log.d("DRAWING", "WE ARE DRAWING");
canvas.drawColor(0x00AAAAAA); //MAKE CANVAS TRANSPARENT
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
首先感謝您的建議,結果是Log.v(canvasData [0] + canvasData [1]);是-11980,我不知道這意味着什麼...... – 2012-02-22 18:53:42
@KamilSalagan:這意味着字節流至少是有效的,我認爲是這種情況。好像你的畫布沒有被更新。將發佈更多筆記。 – PearsonArtPhoto 2012-02-22 19:01:44
這就是有趣的,至少我知道它是好的,但爲什麼不畫布更新?我在我的過程結束時調用invalidate()方法,並且我知道onDraw被調用,我有一個Log.v在那裏輸出到控制檯。 – 2012-02-22 19:05:34