安卓如何将Bitmap设置到画布上。

3

我希望将画布转换成图像并保存在设备上。但当我将位图设置为画布时,我遇到了错误java.lang.UnsupportedOperationException

我的完整代码:

public class SingleTouchEventView extends View {
private Paint paint = new Paint();
private Path path = new Path();


public SingleTouchEventView(Context context, AttributeSet attrs) {
    super(context, attrs);

    paint.setAntiAlias(true);
    paint.setStrokeWidth(6f);
    paint.setColor(Color.WHITE);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeJoin(Paint.Join.BEVEL);
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawPath(path, paint);
    canvas.drawCircle(50, 50, 3, paint);
    Bitmap bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
    canvas.setBitmap(bitmap);
    try {

        File file = new File(Environment.getExternalStorageDirectory() + "/image.jpg");
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(file));
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

也许有人可以帮助我解决这个问题吗?

1个回答

10

这不是绘制位图的正确方式。你不应该使用绘制到屏幕的画布(canvas)。你需要创建第二个画布,将要绘制到的位图作为参数传递给构造函数。然后在该画布上执行任何绘制命令都将绘制到该位图上。最后,你将该位图绘制到屏幕上。类似这样:

那不是绘制到位图的正确方法。不要使用绘制到屏幕的画布,而应创建一个第二个画布,并将要绘制到的位图作为参数传递给构造函数。对该画布进行任何绘制操作都会将其绘制到位图上,然后再将该位图绘制到屏幕上。代码示例如下:

Canvas myCanvas = new Canvas(myBitmap);
myCanvas.drawLine();
myCanvas.drawCircle();
//Insert all the rest of the drawing commands here
screenCanvas.drawBitmap(myBitmap, 0, 0);

我也不会在onDraw中将其写入文件系统-如果这样做,我预计绘图性能会受到严重影响。应该通过单独的函数调用来完成。如果您保留myBitmap变量,可以随时压缩它以将最后的绘图写入磁盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接