4

jpeg リソース イメージを ARGB_8888 形式のビットマップにロードしようとしています。

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());

ここでresIdは jpeg 画像リソースの ID です。出力は「RGB_565」です。Android 2.2および2.3のエミュレーターでこれを試しました。

「inPreferredConfig」のドキュメントは次のように述べています。

これが null でない場合、デコーダはこの内部構成にデコードしようとします。null の場合、または要求が満たされない場合、デコーダーは、システムの画面深度、および元の画像の特性 (ピクセルごとのアルファがあるかどうかなど) に基づいて、最適な構成を選択しようとします (以下の構成も必要です)。します)。画像はデフォルトで ARGB_8888 設定で読み込まれます。

では、「ご要望にお応えできません」ということでしょうか?:) しかし、正直なところ、RGB_565 を ARGB_8888 にデコードするのが非常に難しいことがわかりません。

だから私は間違っているか、これはAndroidのバグだと思った...

4

2 に答える 2

1

jpeg をロードするときは、アルファ チャネルを true に設定する必要があります。

bitmap.setHasAlpha(true);
于 2014-08-13T09:42:07.620 に答える
1

inPreferredConfigソースを調べた後、定義に従うかどうかの決定はネイティブ コードで行われていることしかわかりません。参照:ソース

jpg はRGB_565非アルファ画像の最も効率的な構成であるため、それをデコードしているアルファチャネルを持つことができないためだと思います。ARGB_8888本当にデコードして画像をpngに変換したい場合。

于 2012-05-02T15:11:09.920 に答える