次の問題が発生しました。 Ice Cream Sandwich上で実行されているアプリケーションによってリソースからビットマップがロードされると、ディザが適用されていない現在のウィンドウ形式とは異なる形式にデコードされたように誤ってレンダリングされる可能性があります。しかし、復号形式とウィンドウ形式の両方が明示的に設定されています。ここではICSのビットマップが間違ったピクセル形式でロードされています
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;
と
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
はICS 4.0.3でエミュレータ上で実行されているthis articleから取られたtest appのスクリーンショットは、(それが与えていますHTC HD2に同じ結果):
RGBA_8888
(32ビット)ウィンドウ形式、様々なビットマップ復号フォーマット
RGB_565
(16ビット)ウィンドウ形式、様々なビットマップ復号フォーマット
いくつかが注目される可能性:
- ディザリングフラグが随時考慮されていません;
- ICSのデフォルトのウィンドウ形式は
RGB_565
です。 - だけ格好良い勾配が
RGB_565
ウィンドウ形式とRGBA_8888
ビットマップデコード形式が表示されます。
この問題は、これらの質問に報告されているが、まだ解決策はあり見つからないことができます:
Awful background image quality in Android
quistionは、すべてのこれらのフォーマットをどのように扱うか、ですICS上で正確には、RGBA_8888
形式でICSロードビットマップを作成する方法と、これらのビットマップが正しく表示されるようにウィンドウ形式をRGBA_8888
に設定する方法はありますか?
これらの条件下で、エミュレータとデバイスに違いはありますか? –
いいえ、どちらも同じ動作を示します –