13

Android 4.0 または 4.0.3 を実行しているエミュレーターで、色のバンディングが見られますが、これを取り除くことはできません。私がテストした他のすべての Android バージョンでは、グラデーションは滑らかに見えます。

RGBX_8888 として構成された SurfaceView があり、レンダリングされたキャンバスにバンディングが表示されません。レンダリングの最後にノイズ パターンをオーバーレイして画像を手動でディザ処理すると、グラデーションを再び滑らかにすることができますが、パフォーマンスが犠牲になることは避けたいと思います。

そのため、バンディングは後で導入されています。4.0 以降では、SurfaceView が描画されてから表示されるまでの間のある時点でより低いビット深度に量子化されているとしか思えません。各チャネル、555 (565 ではなく) への量子化を提案します。

Activity onCreate 関数に以下を追加しましたが、違いはありませんでした。

getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

代わりに onAttachedToWindow() に上記を入れてみましたが、それでも変化はありませんでした。

(私は RGBA_8888 が 2.2 以降のデフォルトのウィンドウ フォーマットであると信じているので、そのフォーマットを明示的に設定しても 4.0 以降には影響しないことは驚くに値しません。)

ソースが 8888 でデスティネーションが 8888 の場合、何が量子化/バンディングを導入していて、なぜそれが 4.0+ でしか表示されないのでしょうか?

非常に不可解です。誰かが光を当てることができるのだろうか?

4

2 に答える 2

2

試してみてください。

BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options);

findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient));
于 2012-11-21T16:58:32.397 に答える