1

我正在绘制画布,只是试图将画布保存为 JPEG。我在某些设备上对此进行了测试,发现它似乎不适用于 ICS,并在我尝试以下代码时出现 UnsupportedOperationException 错误:

Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap);

// Drawing to canvas here

OutputStream stream = new FileOutputStream("/sdcard/test.jpg");
bitmap.compress(CompressFormat.JPEG, 100, stream);
stream.close();

这一切都在 onDraw 方法中完成,错误在 canvas.setBitmap(bitmap) 上。

这在我的 Droid X(2.3) 和 Tab 10.1(3.1) 上运行良好,但在运行 ICS 时在我的 Galaxy Nexus(4.0) 和 Tab 10.1 上失败。我可能只是在看一些非常简单的东西。我大部分时间都在为此工作,但没有取得任何进展。任何想法将不胜感激!

更新:我关闭了“强制 GPU 渲染”,现在它似乎可以工作了。必须有更好的方法来做到这一点。

4

2 回答 2

1

在设置中禁用“强制 GPU 渲染”已经解决了这个问题,即使可能有更好的方法。

于 2012-05-01T04:44:57.517 回答
0

我相当确定问题是启用了严格模式。由于该bitmap.compress方法执行文件 I/O,因此严格模式会对您在主线程上执行此类操作这一事实感到不满。尝试在后台线程上执行压缩步骤AsyncTask,例如使用 . 或者,如果您不关心在您的 UI 中可能引入无响应的时刻,只需打开严格模式即可。

于 2012-04-30T03:45:43.710 回答