getHolder().setFormat(PixelFormat.RGBA_888);
Options options = new BitmapFactory.Options();
options.inDither=true;
options.inScaled = true;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
options.inPurgeable=true;
(上記のオプションを使用して作成されたビットマット)
上記のコードを使用すると、次の結果が得られます........
- タブレット デバイスにカラー バンディングが表示されない
テスト用の携帯端末 (Samsung Galaxy Ace) で目立つ色のバンディング
getHolder().setFormat(PixelFormat.RGBA_888); Options options = new BitmapFactory.Options(); options.inDither=true; options.inScaled = true; options.inPreferredConfig = Bitmap.Config.ARGB_565; options.inPurgeable=true;
タブレットに色のバンディングがない
- Galaxy Ace で目立つ色のバンディング
上記と同じ結果
getHolder().setFormat(PixelFormat.RGB_565); Options options = new BitmapFactory.Options(); options.inDither=true; options.inScaled = true; options.inPreferredConfig = Bitmap.Config.RGB_565; options.inPurgeable=true;
タブレットのカラー バンディング
SG Ace のカラー バンディング
getHolder().setFormat(PixelFormat.RGB_565); Options options = new BitmapFactory.Options(); options.inDither=true; options.inScaled = true; options.inPreferredConfig = Bitmap.Config.ARGB_8888; options.inPurgeable=true;
タブレットのカラー バンディング
- SG Ace のカラー バンディング
したがって、結論として、 PixelFormat.xxxx の部分だけが違いを生むようです。私の理解では、これはホルダーの色形式を設定することです。これは、描画されるすべてに影響します。(つまり、すべてがその形式になります)。
誰かが次の行の目的を説明できますか?
options.inPreferredConfig = Bitmap.Config.xxxxxxx
これは、描画されたビットマップには何の影響もないようです。
パフォーマンスが最も重要なので、グラデーションがないように元の png ファイルを変更する必要があるかもしれません (つまり、RGB565 として描画する - これは推奨されますか、それとも 8888 に固執する必要がありますか?) またはディザリングでそれを整理する必要がありますか? (ご覧のとおり、有効にしていますが、役に立たないようです)。
バンディングが常にエースにある理由は何ですか? ハードウェアの制限でしょうか?
これは非常に混乱しています。
(PS私は公式ガイドを読んだことがあります.SOに質問を投稿する前に常にそれを見たり、他の関連するSOの質問を見たりしますが、公式ガイドは(あまりにも頻繁にそうであるように)、これを明確にしません私と私は他の質問で答えを見つけることができなかったので、すでにここにある場合は申し訳ありません)。