BitmapFactory.decodeResource() игнорирует параметр inPreferredConfig для изображений jpg

Я пытаюсь загрузить изображение ресурса jpeg в растровое изображение формата ARGB_8888:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap b = BitmapFactory.decodeResource(resources, resId, opts);
Log.d("test", b.getConfig().toString());

Здесь resId — идентификатор ресурса изображения в формате jpeg. И результат "RGB_565". Пробовал это в эмуляторах андроида 2.2 и 2.3.

Документы «inPreferredConfig» говорят:

Если это не нуль, декодер попытается декодировать в эту внутреннюю конфигурацию. Если он равен нулю или запрос не может быть выполнен, декодер попытается выбрать наиболее подходящую конфигурацию на основе глубины экрана системы и характеристик исходного изображения, таких как наличие попиксельного альфа-канала (требуется конфигурация, которая также делает). По умолчанию изображения загружаются с конфигурацией ARGB_8888.

Значит, я столкнулся со случаем «запрос не может быть выполнен»? :) Но я, честно говоря, не понимаю, насколько сложно декодировать RGB_565 в ARGB_8888.

Поэтому я подумал, может быть, я делаю неправильно или это ошибка в Android...


person dimsuz    schedule 02.05.2012    source источник
comment
Имея ту же проблему. Решено еще?   -  person tofi9    schedule 25.02.2013
comment
Нет, не решено. IIRC Мне пришлось использовать png вместо jpg...   -  person dimsuz    schedule 25.02.2013
comment
Я узнал, что моя проблема возникла по моей вине. Растровое изображение не загружается в RGB_565. Он преобразуется в in, когда я пытаюсь его повернуть ('Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);')   -  person tofi9    schedule 25.02.2013


Ответы (2)


При загрузке jpeg вы должны установить для альфа-канала значение true:

bitmap.setHasAlpha(true);
person Ali    schedule 13.08.2014

После просмотра источника я могу только сказать, что решение следовать определенному inPreferredConfig принимается в нативном коде. ссылка: источник

Я бы предположил, что, поскольку jpg не может иметь альфа-канал, он декодирует его RGB_565, потому что это наиболее эффективная конфигурация для не-альфа-изображения. Если вы действительно хотите, чтобы он был декодирован, чтобы ARGB_8888 преобразовать изображение в png.

person HandlerExploit    schedule 02.05.2012
comment
Ага. Я также проверил исходный код и увидел, что он передается в собственный код ... К сожалению, в настоящее время я не могу использовать png, потому что это сделало бы мой файл apk слишком большим - у меня есть много больших файлов jpg, упакованных в него. , но это уже другая история :) Подожду немного других ответов. Спасибо за ваше! :) - person dimsuz; 02.05.2012