2012-03-21 13 views
13

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

私はRGBX_8888として設定されたSurfaceViewを持っていて、レンダリングされたキャンバスにバンディングはありません。レンダリングの終わりにノイズパターンをオーバーレイすることによってイメージを手動でディザリングすると、グラデーションを滑らかにすることができます。

バンディングは後で導入されます。私は、4.0+では、SurfaceViewが描画されて表示されている間に、より低いビット深度に量子化されていると仮定することができます。そして、グラデーションが一度に8つの値をステップインしていることがわかります各チャネルは、555(565ではなく)の量子化を示唆しています。

私は次のものを自分のアクティビティonCreate関数に追加しましたが、違いはありませんでした。

私はまたonAttachedToWindow()を代わりに入れてみましたが、まだ変更はありませんでした。

(私はRGBA_8888が2.2以上のため、とにかくデフォルトのウィンドウ形式なので、それが明示的にその形式を設定することが4.0+への影響はありません少し驚きだと信じています。)

質問を残す、ソースがある場合8888、目的地は8888で、量子化/バンディングを導入しているのはなぜ?

非常に困惑しています。誰かが光を放つことができるのだろうか?

+1

[ICSのビットマップが間違ったピクセル形式で読み込まれています](http://stackoverflow.com/questions/9097887/bitmaps-on-ics-are-loaded-with-wrong-pixel-format) –

+0

ありがとうそのリンクのために...確かに同じ問題のように見える。いくつかの答えは、単にエミュレータの問題かもしれないと示唆しています。決定的な答えはありませんが、私は今のところそれについて行います。 – threeshinyapples

+0

私はまったく同じ問題を抱えています。私はv2.2 +とv2.3 +の問題を取り除くことができましたが、v4.0ではなく、誰かがこれに対する解決策を知っているかどうか知りたいですか? – Sent1nel

答えて

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

エミュレータの電源をオンにする「を使用するホストのGPU」オプションは、私のために色の問題を修正..信用は私は、Android 4.2を使用していた私の場合、この答えhttps://stackoverflow.com/a/17166234/1287459

に行くDISをお試しください.2。

+0

注意:「ホストGPU」を使用しているときにスクリーンショットが機能しない(黒く表示されます) –

+0

私の場合はうまくいきました...私はこれを行っていましたので、Google Playのスクリーンショットを取得できました。 – Georgie

関連する問題