Android setBitmap to canvas

时间:2014-06-10 08:28:25

标签: android image canvas

我想将画布转换为图像并将其保存在设备上。但是当我将位图设置为画布时,我得到错误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 个答案:

答案 0 :(得分:6)

这不是你如何绘制位图。您不使用绘制到屏幕的画布。您创建第二个画布,将要绘制的位图作为参数传递给构造函数。然后,该画布的任何绘制命令都将绘制位图。然后将该位图绘制到屏幕上。像这样:

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,你可以随时压缩它以写出最后一次绘制到磁盘。