Что делает параметр фильтра для createScaledBitmap?


210

Декларация android.graphics.Bitmap.createScaledBitmapIS

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

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

Ответы:


86

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


5
Что он делает, если вы передаете это ложное? Ближайший сосед?
Клэй

Кроме того, вы знаете, выполняет ли усреднение области, если вы передаете filter = true?
Клэй

Вы должны добавить изображение, чтобы почувствовать разницу, вместо ссылки на внешние источники. Ссылки умирают, источники исчезают.
Мартен

253

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

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

Прохождение filter = trueдаст вам более гладкие края.

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


6
@Mirko - нет, все в порядке: это должно заработать мне популистский значок в любую минуту. :)
teedyay

@ElYeante - у тебя есть пример? Некоторые входные и выходные изображения будут великолепны. Спасибо.
teedyay

8
@teedyay посмотрите на этот пример: dl.dropboxusercontent.com/u/18446310/… Исходное изображение имеет разрешение 1232x2048. Я делаю тяжелое масштабирование с помощью этого кода: bm = MediaStore.Images.Media.getBitmap(this.getContentResolver(), intent.getData()); resizedBitmap = Bitmap.createScaledBitmap(bm, 150, 150, true); resizedBitmap.compress(Bitmap.CompressFormat.JPEG, 95, out);я просто меняю параметр фильтра.
ElYeante

2
этот флаг вводит в заблуждение. Как мы можем уменьшить частоту сглаживания перед повторной выборкой, чтобы предотвратить сглаживание?
Сэм

1
Ссылка не работает @teedyay
Сагар

2

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


2
Как это влияет на выборку растровых изображений?
Клэй,

Я не знаю много о растровой выборке, вы можете проверить следующую страницу вики для деталей. en.wikipedia.org/wiki/Resampling_%28bitmap%29
Каран,

"влияет на выборку растровых изображений" в чем именно? Это хороший эффект или плохой?
Уильям Денисс

@Willian Denniss: проверьте приведенный выше комментарий. Я не знаю деталей, и я еще не пробовал это.
Каран

0

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

API Android не определяет, какой тип фильтра будет применяться, поэтому я предполагаю, что вопрос заключается в следующем: хотите ли вы, чтобы ваши пиксели оставались такими же, как они (как вы хотели бы в 8-битном искусстве), или это нормально, чтобы применить преобразование к сделать изображение более приемлемым (как вы хотели бы на фотографиях).

Есть более общий вопрос о том, нужно ли и как фильтровать на суперпользователя .

Говорит Джефф Этвуд:

В общем, вы хотите получить эффект мягкой резкости при превращении большего изображения в более мелкое, и эффект мягкого размытия при превращении меньшего изображения в более крупное.

Сравнение фильтров изображения

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.