キャンバスに実際よりも大きなサイズのビットマップを描きたい。私はcanvas.drawBitmap(bitmap、null、destRect、null);を使用できます。ただし、ソース画像が宛先の長方形よりも見た目が小さい場合、結果がピクセル化されるため、品質が低下します。
バイリニアまたはバイキュービックリサンプリングを使用してビットマップを描画するにはどうすればよいですか?
どんな助けでもありがたいです、ありがとう。
ペイントで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を検索し、生のソースを掘り下げます。それが唯一のドキュメントです。
FILTER_BITMAP_FLAGは、ほとんどの場合、ダウンスケーリングでは機能しません。
優れたダウンスケーリングアルゴリズム(最近傍のようなものではありません)は、わずか2つのステップで構成されます(さらに、入力/出力画像のトリミングの正確なRectの計算)。
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-アンドロイド用/