Що робить параметр фільтра для createScaledBitmap?


210

Декларація android.graphics.Bitmap.createScaledBitmapє

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- image-getcaledinstan.html для деталей.)


5
Що це робити, якщо ви передаєте це помилково? Найближчий сусід?
clahey

Крім того, чи знаєте ви, чи це усереднення області, якщо ви передаєте filter = true?
clahey

Ви повинні додати зображення, щоб зрозуміти, у чому різниця, замість посилання на зовнішні джерела. Посилання гинуть, джерела зникають.
Маартен

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
Який вплив вона має на вибірку растрових зображень?
clahey

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

"впливає на вибірку растрових зображень", що саме? Це хороший ефект чи поганий?
Вільям Денніс

@ Вілліан Денніс: Перевірте вищевказаний коментар. Я не знаю деталей, і я ще цього не пробував.
Каран

0

Трохи запізнився на вечірку, але я подумав, що деякі зразки зображень можуть прояснити проблему.

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

Існує більш загальне питання про те, чи потрібно і як фільтрувати по суперрусеру .

Каже Джефф Етвуд:

Як правило, ви хочете м'який ефект різкості при створенні більшого зображення в менший і м'який ефект розмивання, коли зображення меншого розміру стає більшим.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.