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を実行するため、strictモードでは、メインスレッドでそのような操作を実行しているという事実に不満を抱くでしょう。AsyncTaskたとえば、を使用して、バックグラウンドスレッドで圧縮手順を実行してみてください。または、UIに応答しない瞬間が発生する可能性を気にしない場合は、厳密モードをオンにします。

于 2012-04-30T03:45:43.710 に答える