- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想将 Canvas 转换为图像并将其保存在设备上。但是,当我将位图设置为 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();
}
}
也许有人可以帮我解决这个问题?
最佳答案
这不是绘制位图的方式。您不使用绘制到屏幕的 Canvas 。您创建第二个 Canvas ,将要绘制的位图作为构造函数中的参数传递。然后对该 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
保存在一个变量中,您可以随时压缩它以将最后一次绘图写入磁盘。
关于Android setBitmap 到 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136265/
我想更新我的 wx.StaticBitmap 的图像当鼠标悬停在小部件上时。基本上,切换到黑白进行测试。 我的问题是当 self.image.SetBitmap(...)被调用后,图像会在我的窗口中重
我想将 Canvas 转换为图像并将其保存在设备上。但是,当我将位图设置为 Canvas 时,出现错误 java.lang.UnsupportedOperationException。我的完整代码:
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我想编写一个白板应用程序。我有一个开始呈现位图(绘图页),然后将该位图复制到 surfaceView。它在模拟器中完美运行,但当我在我的 Samsung Galaxy Ace 上运行它时,它意外关闭。
我在 Canvas 上绘图,只是想将 Canvas 保存为 JPEG。我已经在某些设备上对此进行了测试,发现它似乎无法在 ICS 上运行,并且在我尝试以下代码时出现 UnsupportedOperat
我正在创建一个应用程序,它可以在用户控制下进行绘图等操作,并让他们保存它。我尝试实现此目的的方法是使用 Canvas 在其上绘制的自定义位图,然后保存生成的位图。 一切都按预期工作,直到调用 Canv
我每 100 毫秒调用一次以下函数。它的目标是从 renderBuffer 获取图像,调整其大小并使用 SetBitmap() 在对话框的 CStatic 控件中显示它。问题是,当执行此函数时,我每秒
我是一名优秀的程序员,十分优秀!