ビットマップをリサイズ/スケーリングした後の画質が悪い
2023-10-03 07:48:43
質問
私はカードゲームを書いていて、異なる状況で異なるサイズのカードが必要です。私は画像をビットマップとして保存し、すばやく描画したり再描画したりできるようにしています (アニメーションのため)。
私の問題は、画像をどのように拡大縮小しようとしても (matrix.postScale, matrix.preScale, または createScaledBitmap 関数のいずれか)、常にピクセル化されてぼやけた画像になることです。画像はリサイズせずに描画されると完璧に見えるので、問題を引き起こしているのはスケーリングであることは分かっています。
これらの 2 つのスレッドで説明されているすべての解決策を実行しました。
実行時にリサイズされる画像のアンドロイド品質
実行時に画像をリサイズする際の品質問題
が、まだ埒が明きません。
私はこのコードでビットマップを(ハッシュマップに)保存しています。
cardImages = new HashMap<Byte, Bitmap>();
cardImages.put(GameUtil.hearts_ace, BitmapFactory.decodeResource(r, R.drawable.hearts_ace));
で、このメソッドで描画します(Cardクラスで)。
public void drawCard(Canvas c)
{
//retrieve the cards image (if it doesn't already have one)
if (image == null)
image = Bitmap.createScaledBitmap(GameUtil.cardImages.get(ID),
(int)(GameUtil.standardCardSize.X*scale), (int)(GameUtil.standardCardSize.Y*scale), false);
//this code (non-scaled) looks perfect
//image = GameUtil.cardImages.get(ID);
matrix.reset();
matrix.setTranslate(position.X, position.Y);
//These methods make it look worse
//matrix.preScale(1.3f, 1.3f);
//matrix.postScale(1.3f, 1.3f);
//This code makes absolutely no difference
Paint drawPaint = new Paint();
drawPaint.setAntiAlias(false);
drawPaint.setFilterBitmap(false);
drawPaint.setDither(true);
c.drawBitmap(image, matrix, drawPaint);
}
どんな洞察でも、非常に高く評価されます。ありがとうございます。
どのように解決するのですか?
リソースからビットマップを読み込む際のスケーリングを無効にするまで、低い画面解像度では画像が不鮮明になっていました。
Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap source = BitmapFactory.decodeResource(a.getResources(), path, options);
関連
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] AndroidでラジオボタンにOnClickListenerを設定するには?
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] アンドロイドのクライアントでヒープアップデートを有効にする方法
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] フラグメント間の値の受け渡し方法
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 深くネストされたスタックから離れるとき、Fragmentのバックスタックをクリーンアップする方法はこれで良いのでしょうか?
-
[解決済み] Eclipseでのandroid:configChangesでのAdmobエラー
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] Google Play ストア内部テストのロールアウトが開始できない
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
-
[解決済み] 文字列リソースにHTML?