¿Qué hace el parámetro filter to createScaledBitmap?


La declaración de android.graphics.Bitmap.createScaledBitmap es

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

Sin embargo, la documentación no explica ninguno de los parámetros. Todos ellos son bastante obvios excepto boolean filter. ¿Alguien sabe lo que hace?

Author: clahey, 2010-05-24

3 answers

Una búsqueda rápida a través del código fuente de SKIA indica que (al menos por defecto) el indicador de FILTRO hace que haga una interpolación bilineal directa. Revisa Wikipedia o tu referencia de gráficos favorita para ver cuáles son las consecuencias esperadas. Tradicionalmente, desea realizar interpolación bilineal o bicúbica al aumentar el tamaño de las imágenes y promediar el área al reducir el tamaño de las imágenes. Tengo la impresión (aunque me alegro de ser corregido) que Android / Skia hace submuestreo simple al reducir el tamaño sin filtrar, por lo que es probable que obtenga mejores resultados al filtrar incluso cuando se reduce el tamaño. (Hay un método alternativo para obtener una reducción de tamaño de alta calidad con interpolación, que implica hacer una serie de reducciones de escala del 50%. Véase http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html para más detalles.)

 81
Author: beekeeper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-12 03:40:29

Para ampliar la respuesta de Karan: Como regla general, no verá ninguna diferencia si está escalando su imagen hacia abajo, pero lo hará si está escalando hacia arriba.

Pasar filter = false dará como resultado una imagen pixelada en bloques.

Pasando filter = true le dará bordes más suaves.

Sin embargo, como EIYeante señaló en los comentarios, todavía puede ver una diferencia. Esta es su imagen de ejemplo.

 234
Author: teedyay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-14 18:44:36

Filter establecerá el FILTER_BITMAP_FLAG para pintar, lo que afecta al muestreo de mapas de bits cuando se transforman en función del valor que proporcione.

 3
Author: Karan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-24 06:25:13