2012-04-30 49 views
2

我正在绘制一个画布,并试图将画布保存为JPEG。我已经在某些设备上测试了这一点,并发现它似乎并没有对ICS工作,给我时,我尝试下面的代码一个UnsupportedOperationException错误:为什么setBitmap在ICS中似乎不起作用?

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)和选项卡10.1(3.1),但在Galaxy Nexus(4.0)和我的选项卡10.1运行ICS时失败。我可能只是在寻找一些非常简单的东西。我一直在大部分时间都在进行这项工作,而没有取得任何进展。任何想法将不胜感激!

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

回答

1

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

0

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

+0

嗯,我的设置中禁用了严格模式。我试图从一个AsyncTask这样做,但我猜测,因为它必须重画画布以将其保存到位图,我得到泄漏的窗口错误。 – Mark