Apa yang dilakukan parameter filter untuk membuatScaledBitmap?

210

Deklarasi android.graphics.Bitmap.createScaledBitmapadalah

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

Namun, dokumentasi tidak menjelaskan parameter apa pun. Semuanya cukup jelas kecuali untuk boolean filter. Adakah yang tahu apa fungsinya?

clahey
sumber

Jawaban:

86

Penggalian cepat melalui kode sumber SKIA menunjukkan bahwa (setidaknya secara default) bendera FILTER menyebabkannya melakukan interpolasi bilinear secara langsung. Periksa Wikipedia atau referensi grafik favorit Anda untuk melihat apa konsekuensi yang diharapkan. Secara tradisional, Anda ingin melakukan interpolasi bilinear atau bikubik saat memperbesar gambar, dan area rata-rata saat memperkecil gambar. Saya mendapatkan kesan (meskipun saya senang dapat dikoreksi) bahwa Android / Skia melakukan subsampling sederhana saat perampingan tanpa penyaringan, sehingga Anda cenderung mendapatkan hasil yang lebih baik dari penyaringan bahkan saat perampingan. (Ada metode alternatif untuk mendapatkan perampingan berkualitas tinggi dengan interpolasi, termasuk melakukan serangkaian pengurangan skala 50%. Lihat http://today.java.net/pub/a/today/2007/04/03/perils-of- image-getscaledinstance.html untuk detail.)

pemelihara lebah
sumber
5
Apa fungsinya jika Anda menganggapnya salah? Tetangga terdekat?
clahey
Juga, apakah Anda tahu apakah itu melakukan rata-rata area jika Anda melewatkan filter = true?
clahey
Anda harus menambahkan gambar untuk merasakan perbedaannya, alih-alih merujuk sumber eksternal. Tautan mati, sumber menghilang.
Maarten
253

Untuk memperluas jawaban Karan: Sebagai aturan umum Anda tidak akan melihat perbedaan jika Anda skala gambar Anda ke bawah , tetapi Anda akan jika Anda scaling up .

Passing filter = falseakan menghasilkan gambar yang pucat dan pucat.

Lewat filter = trueakan memberi Anda tepi yang lebih halus.

Namun, seperti yang ditunjukkan EIYeante dalam komentar, Anda mungkin masih melihat perbedaan. Ini adalah contoh gambar mereka.

Teedyay
sumber
6
@Mirko - nah, tidak apa-apa: ini seharusnya memberi saya lencana populis sebentar lagi. :)
teedyay
@ElYeante - apakah Anda punya contoh? Beberapa gambar input dan output akan lebih bagus. Terima kasih.
teedyay
8
@teedyay, lihat contoh ini: dl.dropboxusercontent.com/u/18446310/… Gambar asli memiliki resolusi 1232x2048. Saya melakukan donwaling berat dengan kode ini: bm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), intent.getData()); resizedBitmap = Bitmap.createScaledBitmap(bm, 150, 150, true); resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, out);Saya hanya mengubah parameter filter.
ElYeante
2
bendera ini menyesatkan. bagaimana kita bisa downsample dengan smoothing sebelum resampling untuk mencegah anti-aliasing?
Sam
1
Tautannya rusak @teedyay
Sagar
2

Filter akan menetapkan FILTER_BITMAP_FLAG untuk lukisan yang memengaruhi pengambilan sampel bitmap ketika ditransformasikan berdasarkan nilai yang Anda berikan.

Karan
sumber
2
Apa efeknya pada pengambilan sampel bitmap?
clahey
Saya tidak tahu banyak tentang pengambilan sampel bitmap, Anda dapat memeriksa halaman wiki berikut untuk detailnya. en.wikipedia.org/wiki/Resampling_%28bitmap%29
Karan
"Mempengaruhi pengambilan sampel bitmap" dalam apa sebenarnya? Apakah itu efek yang baik atau yang buruk?
William Denniss
@Willian Denniss: Periksa komentar di atas. Saya tidak tahu detailnya dan saya belum mencoba ini.
Karan
0

Agak terlambat ke pesta, tapi saya pikir beberapa contoh gambar bisa mengklarifikasi masalah ini.

API Android tidak menentukan jenis filter apa yang akan diterapkan, jadi saya kira pertanyaannya adalah: apakah Anda ingin agar piksel Anda tetap seperti semula (seperti yang Anda inginkan dalam seni 8-bit) atau apakah boleh menerapkan transformasi ke membuat gambar lebih enak (seperti yang Anda inginkan dalam foto).

Ada pertanyaan yang lebih umum tentang apakah dan bagaimana memfilter pada pengguna super .

Kata Jeff Atwood:

Secara umum, Anda menginginkan efek penajaman ringan saat membuat gambar yang lebih besar menjadi yang lebih kecil, dan efek buram ringan saat membuat gambar yang lebih kecil menjadi yang lebih besar.

filter gambar dibandingkan

Maarten
sumber