CreateScaledBitmap için filter parametresi ne işe yarar?


210

Beyanı android.graphics.Bitmap.createScaledBitmapDİR

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

Ancak, belgeler hiçbir parametreyi açıklamaz. Hepsi hariç oldukça açıktır boolean filter. Ne yaptığını bilen var mı?

Yanıtlar:


86

SKIA kaynak kodunu hızlıca incelemek (en azından varsayılan olarak) FİLTRE bayrağının basit bir çift doğrusal enterpolasyon yapmasına neden olduğunu gösterir. Beklenen sonuçların ne olduğunu görmek için Wikipedia'yı veya favori grafik referansınızı kontrol edin. Geleneksel olarak, görüntüleri büyütürken bilinear veya bikubik enterpolasyon yapmak ve görüntüleri küçültürken alan ortalaması almak istersiniz. Android / Skia'nın filtreleme olmadan küçülme sırasında basit alt örnekleme yaptığı izlenimini edindim (böylece küçülme sırasında bile filtrelemeden daha iyi sonuçlar elde edersiniz). (İnterpolasyon ile yüksek kalitede küçülme elde etmek için,% 50'lik bir ölçek küçültme serisi yapmayı içeren alternatif bir yöntem vardır. Bkz. Http://today.java.net/pub/a/today/2007/04/03/perils-of- görüntü getscaledinstance.html detaylar için.)


5
Yanlış iletirseniz ne yapar? En yakın komşu?
clahey

Ayrıca, filter = true değerini geçerseniz alan ortalaması yapıp yapmadığını biliyor musunuz?
clahey

Dış kaynaklara başvurmak yerine, farkın ne olduğunu anlamak için bir resim eklemelisiniz. Bağlantılar ölür, kaynaklar yok olur.
Maarten

253

Karan'ın yanıta genişletmek için: Genel bir kural olarak resminizin ölçekleme eğer herhangi bir fark görmeyeceksiniz aşağı bunu ölçekleme eğer, ama olacak kadar .

Geçme filter = false, bloklu, pikselli bir görüntüyle sonuçlanır.

Geçmek filter = truesize daha yumuşak kenarlar verecektir.

Ancak, EIYeante'nin yorumlarda belirttiği gibi, yine de bir fark görebilirsiniz. Bu onların örnek görüntüsü.


6
@Mirko - nah, sorun değil: bu bana her an Popülist rozetini kazandırmalı. :)
teedyay

@ElYeante - bir örnek var mı? Bazı giriş ve çıkış görüntüleri harika olurdu. Teşekkürler.
teedyay

8
@teedyay bu örneğe bakın: dl.dropboxusercontent.com/u/18446310/… Orijinal görüntünün çözünürlüğü 1232x2048. Bu kod ile ağır bir donwscaling yapıyorum: bm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), intent.getData()); resizedBitmap = Bitmap.createScaledBitmap(bm, 150, 150, true); resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, out);Sadece filter parametresini değiştiriyorum.
ElYeante

2
bu bayrak yanıltıcı. kenar yumuşatmayı önlemek için yeniden örneklemeden önce yumuşatma ile nasıl örnek alabiliriz?
Sam

1
Bağlantı koptu @teedyay
Sagar

2

Filtre , verdiğiniz değere göre dönüştürüldüklerinde bitmap'lerin örneklenmesini etkileyen boyama için FILTER_BITMAP_FLAG değerini ayarlar .


2
Bitmaplerin örneklenmesi üzerinde ne gibi bir etkisi vardır?
clahey

Bitmap örneklemesi hakkında fazla bir şey bilmiyorum, ayrıntılar için aşağıdaki wiki sayfasını kontrol edebilirsiniz. en.wikipedia.org/wiki/Resampling_%28bitmap%29
Karan

"Bitmap'lerin örneklenmesini etkiler" tam olarak ne? İyi bir etki mi yoksa kötü bir etki mi?
William Denniss

@Willian Denniss: Yukarıdaki yorumu kontrol edin. Ayrıntıları bilmiyorum ve henüz denemedim.
Karan

0

Partiye biraz geç kaldım, ancak bazı örnek görüntülerin sorunu netleştirebileceğini düşündüm.

Android'in API'si ne tür bir filtre uygulanacağını belirtmez, bu yüzden soru şu: piksellerinizin olduğu gibi kalmasını istiyor musunuz (8 bit sanatta istediğiniz gibi) veya bir dönüşüm uygulamak uygun mu görüntüyü daha lezzetli hale getirin (fotoğraflarda istediğiniz gibi).

Süper kullanıcı üzerinde filtrelenip filtrelenmeyeceği ve nasıl filtreleneceği hakkında daha genel bir soru var .

Jeff Atwood şöyle diyor:

Genel olarak, daha büyük bir görüntüyü daha küçük bir görüntüye dönüştürürken hafif bir keskinleştirme efekti ve daha küçük bir görüntüyü daha büyük bir görüntüye dönüştürürken hafif bir bulanıklık efekti istersiniz.

görüntü filtreleri karşılaştırıldı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.