UnsupportedException from Canvas.setBitmap(Bitmap)



我正在创建一个应用程序,在用户控制下进行绘图等,让他们保存它。我试图实现这一目标的方式是使用自定义位图,画布在其上绘制,然后保存生成的位图。

一切正常,直到Canvas.setBitmap(Bitmap)被调用。

我得到以下错误:

03-24 13:47:50.741: E/AndroidRuntime(27888): FATAL EXCEPTION: main
03-24 13:47:50.741: E/AndroidRuntime(27888): Process: example.imageeditor, PID: 27888
03-24 13:47:50.741: E/AndroidRuntime(27888): java.lang.UnsupportedOperationException
03-24 13:47:50.741: E/AndroidRuntime(27888):    at android.view.HardwareCanvas.setBitmap(HardwareCanvas.java:39)
抛出异常的代码:
protected void onDraw(Canvas canvas) {
    mResultImage=Bitmap.createBitmap(width,height,mOriginalImage.getConfig());
    canvas.setBitmap(mResultImage);
    canvas.save();
    if(mOriginalImage!=null)
        canvas.drawBitmap(mOriginalImage, width, height, paint);
    else
        canvas.drawText("Image loading...", width/2f-20, height/2, paint);
    canvas.drawText(text, x, y-20, paint);
    canvas.restore();
    super.onDraw(canvas);
}

android.view. hardwareccanvas甚至不在android的引用上。但我找到了一些相关信息。似乎它的setBitmap(Bitmap)还没有写,这是ok的。

我的问题是为什么onDraw(画布)返回一个hardwareccanvas类?它甚至不是Canvas的超类。

附加问题:有办法解决这个问题吗?

如果你想在位图上绘制,你应该创建一个新的画布,将位图传递给它。不应该允许更改绘制视图的画布的目标。因此,只需用位图创建一个新的画布,然后在onDraw方法中在画布上绘制结果位图。

最新更新