2010-05-24 6 views
180

La dichiarazione di android.graphics.Bitmap.createScaledBitmap èCosa fa il parametro del filtro per createScaledBitmap?

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

Tuttavia, la documentazione non spiega uno dei parametri. Tutti sono abbastanza ovvi tranne per boolean filter. Qualcuno sa cosa fa?

risposta

78

Un rapido scavo attraverso il codice sorgente SKIA indica che (almeno per impostazione predefinita) il flag FILTER fa sì che esegua un'interpolazione bilineare diretta. Consulta Wikipedia o il tuo riferimento grafico preferito per vedere quali sono le conseguenze previste. Tradizionalmente, si desidera eseguire l'interpolazione bilineare o bicubica durante l'upsize delle immagini e la media delle aree quando si ridimensionano le immagini. Ho l'impressione (anche se sono contento di essere corretto) che Android/Skia esegua un semplice sottocampionamento durante il ridimensionamento senza filtri, quindi è probabile che si ottengano risultati migliori dal filtraggio anche durante il ridimensionamento. (C'è un metodo alternativo per ottenere ridimensionamenti di alta qualità con l'interpolazione, che comportano una serie di riduzioni della scala del 50%. Vedere http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html per dettagli.)

+2

Cosa fa se lo passi falso? Il vicino più prossimo? – clahey

+0

Inoltre, sai se sta facendo la media dell'area se passi filter = true? – clahey

3

Il filtro imposterà lo FILTER_BITMAP_FLAG per la verniciatura che influisce sul campionamento delle bitmap quando vengono trasformate in base al valore fornito.

+2

Che effetto ha sul campionamento di bitmap? – clahey

+0

Non so molto del campionamento bitmap, puoi controllare la seguente pagina wiki per i dettagli. http://en.wikipedia.org/wiki/Resampling_%28bitmap%29 – Karan

+0

"colpisce il campionamento di bitmap" in che cosa che cosa esattamente? È un buon effetto o cattivo? –

223

Per espandere sulla risposta di Karan: Come regola generale non vedrà alcuna differenza se si sta scalando la vostra immagine giù, ma voi se siete ridimensionarla fino.

Passando filter = false si tradurrà in un blocchi, immagini pixelizzate.

Passando filter = true vi darà bordi più uniformi.

Tuttavia, come EIYeante sottolineato nei commenti, si potrebbe ancora vedere una differenza. This is their example image.

+4

questa dovrebbe essere la risposta accettata – Mirko

+6

@ Mirko - nah, va bene: questo mi dovrebbe guadagnare il distintivo populista da un momento all'altro. :) – teedyay

+4

Questo parametro ha un effetto downscaling delle immagini, e abbastanza noticiable ... – ElYeante