2012-05-02 10 views
4

私はARGB_8888形式のビットマップにJPEGリソース画像をロードしようとするが無視されます:BitmapFactory.decodeResource()JPG画像のinPreferredConfigオプション

BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inPreferredConfig = Bitmap.Config.ARGB_8888; 
Bitmap b = BitmapFactory.decodeResource(resources, resId, opts); 
Log.d("test", b.getConfig().toString()); 

ここ残油は、JPEG画像リソースのIDです。 出力は「RGB_565」です。 アンドロイド2.2と2.3のエミュレータでこれを試してみました。 「inPreferredConfig」の

ドキュメントは言う:

これが非nullの場合、デコーダは、この内部 設定に解読しようとします。 nullの場合、または要求を満たすことができない場合、 デコーダは、 システムの画面の深さと元の画像の特性( など)に基づいて、最適な一致する設定を選択しようとします。 configも同様です)。 イメージはデフォルトでARGB_8888の設定で読み込まれます。

」の場合、私は「」の要求に合致できません。 :) しかし、私は正直なところ、RGB_565をARGB_8888にデコードすることは非常に難しいとは見えません。

ので、ソースを見た後、私は定義されinPreferredConfigに従うことを決定はネイティブコードで行われていることのみを伝えることができ

+0

は、同じ問題を持ちます。まだ解決されていますか? – tofi9

+0

いいえ、解決されていません。 IIRC私はjpgの代わりにpngを使用しなければならなかった... – dimsuz

+0

私の問題は私のせいだと分かった。ビットマップはRGB_565にロードされません。 (ビットマップ、0、0、幅、高さ、行列、真);) – tofi9

答えて

1

あなたは真のアルファチャンネルを設定する必要があります。

bitmap.setHasAlpha(true); 
1

...私は多分私が間違っているのと思ったか、これはアンドロイドのバグです。 ref:source

これは、非アルファ画像の中で最も効率的な設定であるため、jpgはそれをデコードしているアルファチャンネルを持つことができないと思われます。RGB_565あなたが本当にそれがARGB_8888にデコードされたければ、画像をpngに変換してください。 JPEGをロードするとき

+0

うん。私もソースをチェックして、それがネイティブコードに渡されているのを見ました...残念ながら現在、私はpngのファイルをあまりにも大きくするので、私はpngで続けることができません - 私はそれに詰め込まれた大きなjpgファイル、それは別の話です:)他の答えを少し待つでしょう。あなたのおかげで! :) – dimsuz

関連する問題