2012-04-30 53 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