web-dev-qa-db-ja.com

createScaledBitmapのフィルターパラメーターは何をしますか?

Android.graphics.Bitmap.createScaledBitmapの宣言は

public static Bitmap createScaledBitmap
  (Bitmap src, int dstWidth, int dstHeight, boolean filter)

ただし、ドキュメントにはパラメーターの説明はありません。 boolean filterを除き、それらはすべて明白です。誰がそれが何をしているのか知っていますか?

207
clahey

SKIAソースコードをすばやく調べると、(少なくともデフォルトでは)FILTERフラグが原因で単純な双線形補間が行われていることがわかります。ウィキペディアまたはお気に入りのグラフィックリファレンスをチェックして、予想される結果を確認してください。従来、画像をアップサイズする場合はバイリニア補間またはバイキュービック補間を行い、画像をダウンサイズする場合は面積平均を行います。 Android/Skiaはフィルタリングなしでダウンサイジングすると単純なサブサンプリングを実行するという印象を受けます(修正できてうれしいです)。したがって、ダウンサイジングでもフィルタリングからより良い結果が得られる可能性があります。 (補間を使用して高品質のダウンサイジングを行う別の方法があります。これには、一連の50%の縮小が含まれます。 http://today.Java.net/pub/a/today/2007/04/03/ perils-of-image-getscaledinstance.html 詳細については)

85
beekeeper

カランの答えを拡張するには:一般的なルールとして、画像をスケーリングしている場合downに違いは見られませんが、再スケーリングup

filter = falseを渡すと、ブロック状のピクセル化された画像になります。

filter = trueを渡すと、エッジがより滑らかになります。

ただし、EIYeanteがコメントで指摘したように、あなたはまだ違いを見るかもしれません。 これは彼らのサンプル画像です。

248
teedyay

フィルタは、 FILTER_BITMAP_FLAG を設定します。これは、指定した値に基づいて変換されるビットマップのサンプリングに影響を与えます。

3
Karan