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


210

の宣言android.graphics.Bitmap.createScaledBitmap

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

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

回答:


86

SKIAソースコードをすばやく掘り下げると、(少なくともデフォルトで)FILTERフラグによって単純な双一次補間が行われることがわかります。ウィキペディアまたはお気に入りのグラフィックスリファレンスをチェックして、予想される結果を確認してください。従来は、画像をアップサイズするときにバイリニアまたはバイキュービック補間を行い、画像をダウンサイズするときにエリア平均化を行います。Android / Skiaはフィルタリングなしでダウンサイジングするときに単純なサブサンプリングを行うという印象を受けます(訂正してよかったのですが)。そのため、ダウンサイジングしているときでも、フィルタリングからより良い結果が得られるでしょう。(一連の50%のスケール削減を行うことを含む、補間を使用して高品質のダウンサイジングを行う別の方法があります。http://today.java.net/pub/a/today/2007/04/03/perils-of-を参照してください。image-getscaledinstance.html 詳細については。)


5
falseを渡すとどうなりますか?一番近い隣人?
clahey 2010年

また、filter = trueを渡した場合、それが面積平均を行っているかどうかを知っていますか?
clahey 2010年

外部ソースを参照するのではなく、違いを理解するために画像を追加する必要があります。リンクは消え、ソースは消えます。
Maarten

253

カランの答えに展開するには:一般的なルールとして、あなたのイメージスケーリングしている場合、あなたはどんな違いが表示されませんダウンしていますが、あなたはそれをスケーリングしているかどうアップ

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

合格filter = trueすると滑らかなエッジになります。

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


6
@ミルコ-いや、大丈夫です。これで、今すぐポピュリストバッジを獲得できます。:)
teedyay

@ElYeante-例はありますか?いくつかの入力と出力の画像は素晴らしいでしょう。ありがとう。
teedyay 2013年

8
@teedyayこの例を見てください:dl.dropboxusercontent.com/u/18446310/… 元の画像の解像度は1232x2048です。私はこのコードで重いダウンスケーリングを行っていbm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), intent.getData()); resizedBitmap = Bitmap.createScaledBitmap(bm, 150, 150, true); resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, out);ます。フィルターパラメーターを変更しているだけです。
ElYeante 2013年

2
このフラグは誤解を招くものです。アンチエイリアスを防ぐために、リサンプリングの前にスムージングでダウンサンプリングするにはどうすればよいですか?
Sam

1
リンクが壊れました@teedyay
Sagar

2

Filterは、ペイントするFILTER_BITMAP_FLAGを設定します。これは、指定した値に基づいてビットマップが変換されるときに、ビットマップのサンプリングに影響します。


2
ビットマップのサンプリングにどのような影響がありますか?
クラヘイ

ビットマップのサンプリングについてはよくわかりません。詳細については、次のWikiページを確認してください。en.wikipedia.org/wiki/Resampling_%28bitmap%29
Karan

「ビットマップのサンプリングに影響を与える」とは正確には何ですか?良い効果ですか、悪い効果ですか?
ウィリアム・デニス2010年

@Willian Denniss:上記のコメントを確認してください。詳細はわかりませんし、まだ試していません。
Karan

0

パーティーには少し遅れましたが、サンプル画像で問題が明らかになるのではないかと思いました。

AndroidのAPIは適用されるフィルターの種類を指定していないため、問題は、おそらくピクセルをそのまま(8ビットアートの場合と同じように)残しておきたいですか、それとも変換を適用しても大丈夫ですか? (写真で望むように)イメージをより美しくします。

スーパーユーザーでフィルタリングするかどうか、およびどのようにフィルタリングするかについて、より一般的な質問があります

ジェフ・アトウッドは言う:

一般に、大きな画像を小さな画像にする場合は穏やかなシャープ効果を、小さな画像を大きな画像にする場合は穏やかなぼかし効果を望みます。

比較した画像フィルター

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.