2012-04-30 6 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)とTab 10.1(3.1)ではうまく動作しますが、ICSを実行しているときはGalaxy Nexus(4.0)とTab 10.1で失敗します。私はちょうど本当に簡単な何かを探しているかもしれません。私は夜のこのほとんどの作業を進めていません。どんなアイデアも大歓迎です!

更新日: 「強制GPUレンダリング」を無効にしたところ、今のところ動作するようです。これを行うにはより良い方法が必要です。

答えて

1

「GPUレンダリングを強制する」を無効にすると、問題が解決する可能性があります。

0

strict modeが有効になっていることは間違いありません。 bitmap.compressメソッドはファイルI/Oを実行するため、厳密なモードはメインスレッドでこのような操作を行っているという事実に不満を募らせます。たとえば、AsyncTaskを使用して、バックグラウンドスレッドで圧縮ステップを実行してみてください。また、あなたのUIに無意味な瞬間を潜在的に導入する気にならない場合は、厳格なモードにしてください。

+0

私の設定では厳密なモードが無効になっています。私はAsyncTaskからこれをやろうとしましたが、キャンバスをビットマップに保存するように再描画する必要があるため、リークしたウィンドウエラーが発生しています。 – Mark

関連する問題