Что делает параметр filter для createScaledBitmap?

Объявление android.graphics.Bitmap.createScaledBitmap -

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

Однако документация не объясняет ни одного из параметров. Все они довольно очевидны, за исключением boolean filter. Кто-нибудь знает, что он делает?

Ответ 1

Быстрый поиск исходного кода SKIA указывает, что (по крайней мере по умолчанию) флаг FILTER заставляет его выполнять прямолинейную билинейную интерполяцию. Проверьте Википедию или свою любимую графическую ссылку, чтобы увидеть, каковы ожидаемые последствия. Традиционно вы хотите выполнять билинейную или бикубическую интерполяцию при увеличении изображений и усреднение области при уменьшении изображений. У меня создается впечатление (хотя я рад, что меня исправили), что Android/Skia делает простую подвыборку при сокращении без фильтрации, поэтому вы, вероятно, получите лучшие результаты от фильтрации даже при сокращении. (Здесь есть альтернативный метод для получения качественного сокращения с интерполяцией, включающий серию сокращений масштаба на 50%. Подробнее см. http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html.)

Ответ 2

Чтобы расширить ответ на вопрос Karan: Как правило, вы не увидите никакой разницы, если вы уменьшаете изображение, но вы будете, если его масштабируете.

Передача filter = false приведет к блочному пикселируемому изображению.

Передача filter = true даст вам более гладкие ребра.

Однако, как отметил EIYeante в комментариях, вы все равно можете увидеть разницу. Это пример изображения.

Ответ 3

Фильтр установит FILTER_BITMAP_FLAG для рисования, который влияет на выборку растровых изображений, когда они преобразуются на основе значения, которое вы предоставляете.