17

キャンバスに実際よりも大きなサイズのビットマップを描きたい。私はcanvas.drawBitmap(bitmap、null、destRect、null);を使用できます。ただし、ソース画像が宛先の長方形よりも見た目が小さい場合、結果がピクセル化されるため、品質が低下します。

バイリニアまたはバイキュービックリサンプリングを使用してビットマップを描画するにはどうすればよいですか?

どんな助けでもありがたいです、ありがとう。

4

2 に答える 2

37

ペイントでFILTER_BITMAP_FLAGフラグを設定する必要があります。

canvas.drawBitmap(bitmap, matrix, null); //ugly jaggies unless scale is 1:1, but fast

また

Paint paint = new Paint();
paint.setFilterBitmap();
canvas.drawBitmap(bitmap, matrix, paint); // pretty but slower (not too slow, usually)

同じことが他の(構文糖衣)形式のdrawBitmapメソッドにも当てはまります。

ほとんどのAndroid描画オプションのドキュメントはどこにもありません。また、レンダリングを行う基盤となるネイティブのSkiaライブラリのドキュメントもありません。もしあったらもっと幸せになるでしょう。SkiaのソースコードはGoogleコード検索で検索できます。Skiaを検索し、生のソースを掘り下げます。それが唯一のドキュメントです。

于 2010-03-25T19:57:48.137 に答える
1

FILTER_BITMAP_FLAGは、ほとんどの場合、ダウンスケーリングでは機能しません。

優れたダウンスケーリングアルゴリズム(最近傍のようなものではありません)は、わずか2つのステップで構成されます(さらに、入力/出力画像のトリミングの正確なRectの計算)。

  1. BitmapFactory.Options :: inSampleSize-> BitmapFactory.decodeResource()を使用して、必要な解像度にできるだけ近づけてダウンスケールしますが、それ以上にします。
  2. Canvas :: drawBitmap()を使用して少しダウンスケーリングすることにより、正確な解像度を取得します

SonyMobileがこのタスクをどのように解決したかについての詳細な説明は次のとおりです:https ://web.archive.org/web/20140228024414/http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for- your-android-application /

SonyMobileスケールユーティリティのソースコードは次のとおりです。https ://web.archive.org/web/20140227233706/http://developer.sonymobile.com/downloads/code-example-module/image-scaling-code-example-アンドロイド用/

于 2014-04-21T02:13:45.910 に答える