1

Android グラフィックに問題があります。私はゲーム開発を行っており、色のグラデーションを持つ画像を表示する必要があります。私の問題は、グラデーションを使用してビットマップ画像 (png 形式) を読み込むと、画像にバンディング アーティファクトが表示されることです。これは Android 4 にあります。この問題に関連する多数の投稿を調査し、次のような多数の解決策を試しました。

  1. 入力時の画像のディザリング

    BitmapFactory.Options factoryOptions = 
      new BitmapFactory.Options();
    factoryOptions.inDither = true;
    ...
    background = BitmapFactory.decodeResource( resources, R.drawable.game_page_background, factoryOptions );
    
  2. 「res/drawable」ではなく「res/raw」から画像をロードする

  3. ディスプレイのピクセル形式を次のように確認します: Bitmap Config ARGB_8888

  4. 入力ストリームを使用してアセット ディレクトリから画像をロードします。

ソリューション 2 と 4 は、アーティファクトを生成している Android イメージの「最適化」を防止する必要があると想定しました。しかし、どのソリューションも機能しません。ビットマップをどのようにロードしてもアーティファクトは残ります。結局、Photoshop を使用して画像にノイズを焼き付けるという恐ろしい回避策を取らなければなりませんでした。明らかに、これは恐ろしい回避策です。

このコミュニティの誰かが、バンディング アーティファクトなしで Android でスムーズにレンダリングするグラデーション付きのビットマップ イメージを取得する方法について、さらにアドバイスを提供できますか?

次のコード フラグメントは、これらのテスト イメージをどのように生成したかを示しています...

コードフラグ **

...
InputStream is = null;
try
{
    is = ((Activity)gameMngr).getAssets().open("test_background_3.png");
}
catch( IOException ioe)
{
    Log.d(TAG, "TEST CODE: Unable to open resources. ");
}
this.background = BitmapFactory.decodeStream(is);
...

// ELSEWHERE
...
canvas.drawBitmap( this.background, 0, 0, null );
...

エンドフラグ **

4

1 に答える 1

0

from decodeStream のコピーを作成し、Bitmap COnfig を指定できると思います。これは、あなたの改訂されたコード フラグメントです。

InputStream is = null;
try
{
    is = ((Activity)gameMngr).getAssets().open("test_background_3.png");
}
catch( IOException ioe)
{
    Log.d(TAG, "TEST CODE: Unable to open resources. ");
}
this.background = BitmapFactory.decodeStream(is);

//create copy and specify the config of the bitmap, setting to true make the bitmap
//mutable.
Bitmap newBtmp = this.background.copy(Bitmap.Config.ARGB_8888, true);

//use the newBtmp object
canvas.drawBitmap( newBtmp, 0, 0, null );
...

この投稿が役に立った場合は、この投稿を回答として作成してください。

ありがとう。

于 2012-04-19T10:52:20.827 に答える