Растровые изображения в ICS загружаются с неправильным форматом пикселей

Я столкнулся со следующей проблемой. Когда какое-либо растровое изображение загружается из ресурсов приложением, работающим на Ice Cream Sandwich, оно, вероятно, будет отображаться неправильно, как если бы оно было декодировано в формат, отличный от текущего формата окна, без применения дизеринга. Однако и формат декодирования, и формат окна были явно установлены:

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inPreferredConfig = Bitmap.Config.RGBA_8888;

и

getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);

Вот скриншоты тестового приложения , взятые из этой статьи , работающего на эмуляторе с ICS 4.0.3 (дает те же результаты на HTC HD2):

RGBA_8888 (32 бита) формат окна , различные форматы декодирования растровых изображений: 32-bit window format

RGB_565 (16 бит) формат окна , различные форматы декодирования растровых изображений: 16-bit window format

Можно отметить несколько вещей:

  • Флаг дизеринга время от времени не учитывается;
  • Формат окна по умолчанию для ICS, кажется, RGB_565 ;
  • Единственное хорошее ищущий градиент появляется с форматом окна RGB_565 и форматом декодирования растрового изображения RGBA_8888 .

Об этой проблеме также сообщалось в этих вопросах, но до сих пор нет решения в них:

Проблема совместимости с градиентом - ICS по умолчанию использует меньше цветов, чем все предыдущие версии Android.

Ужасное качество фонового изображения в Android

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

12
задан Community 23 May 2017 в 12:02
поделиться