为什么setBitmap似乎不适用于ICS?

时间:2012-04-30 03:32:02

标签: android canvas bitmap android-4.0-ice-cream-sandwich

我正在绘制画布,只是尝试将画布保存为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(位图)上。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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