gpt4 book ai didi

java - Canvas 位图到字节数组并读回麻烦

转载 作者:行者123 更新时间:2023-12-01 15:32:32 24 4
gpt4 key购买 nike

我有一个 Canvas ,我正在尝试取出位图,将其转换为字节数组并将其序列化保存到文件中。然后稍后打开、反序列化并将位图应用回 Canvas 。在下面的代码中,一切似乎都运行良好,除了将位图应用到 Canvas 时什么也没有出现。有人可以告诉我哪里出了问题吗?

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 - 包含我所有数据的可序列化类,其中有简单的获取/设置

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);
}

最佳答案

我会做以下 2 个测试。

  1. 记录一些字节流以确保其加载正确。诸如 Log.v(canvasData[0]+canvasData[1]); 之类的东西,或者在那里放置一个断点,或者只是为了确保数据正确。
  2. 使用相同的代码绘制一个您知道有效的位图,并查看它是否正确显示。

我不确定到底发生了什么,但我强烈怀疑以下情况之一。

  1. 未正确读取字节流。
  2. 位图未更新到屏幕,或者使用的尺寸非常小。

如果你的字节流数据有东西,那么你会想看看 Canvas documentation.具体请看下面的内容。

为了查看 Canvas ,必须将其放在 View 上。一旦它位于 View 上,就必须调用 onDraw() 命令才能使其可见。我会确保您实际上正在执行 onDraw(),并且 Canvas 与 View 正确关联。如果您已经在使用 onDraw(),请发布与其相关的代码。

关于java - Canvas 位图到字节数组并读回麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com