4

inBitmap を使用して android3+ にビットマップをロードしています。しかし、私はいつも得ますjava.lang.IllegalArgumentException: Problem decoding into existing bitmap.

LruCache のentryMoved()機能:reusableBitmaps.add(new SoftReference<Bitmap>(oldValue.getBitmap()));ビットマップを保持するために使用します。

次回はビットマップをロードします: reusableBitmaps で iterator を使用して、inBitmap に使用できるものを見つけます。公式の開発者 Web サイトでメモリを管理するのと同じように、iterator を使用してどれを見つけます。

しかし、残念ながら、常に失敗し、logcat が示していますjava.lang.IllegalArgumentException: Problem decoding into existing bitmap.

誰でもサンプルまたはチュートリアルを提供できますか?

4

2 に答える 2

10

私はこれを使用して修正しました:

options.inSampleSize = 1;

これは、質問に対する 2 番目のコメントで言及されているビデオからのヒントです。

于 2013-09-03T23:31:14.627 に答える
0

ビットマップ API から推論できる限り、ビットマップは不変です。Bitmap クラスにはパブリック コンストラクターがありません。作成するには、ビットマップの幅と高さをメソッドの 1 つに指定する必要がありcreateBitmapます。したがって、Bitmap インスタンスを再利用することはできません。

しかし、私が間違っている場合に備えて、ビットマップがビットマップの幅と高さを保持し、ビットマップのデコードに使用されるバイトバッファのサイズを決定するという事実にエラーが依然として関連していると思います。

異なる解像度の画像を同じビットマップにデコードしている場合、ほとんどの場合エラーが発生します。

トラブルシューティングを行うには、独自の同じコードを試して、まったく同じ幅とまったく同じ高さの画像をデコードしてください。エラーが解消された場合、私の理論は正しく、再利用可能なビットマップに関しては画像サイズに対応する必要があります。

私も結果に興味があるので、発見を投稿できればそれは素晴らしいことです.

乾杯

于 2013-09-03T23:40:59.097 に答える