Цветовой диапазон только для Android 4.0+

На эмуляторах под управлением Android 4.0 или 4.0.3 я вижу ужасную цветопередачу, от которой я не могу избавиться. На каждой другой версии Android, которую я тестировал, градиенты выглядят гладкими.

У меня есть SurfaceView, который настроен как RGBX_8888, и полоса отсутствует в рендеринговом холсте. Если я вручную сглажу изображение путем наложения шумового рисунка в конце рендеринга, я могу сделать градиенты снова гладкими, хотя, очевидно, ценой производительности, которую я бы предпочел избежать.

Таким образом, полоса пропускания вводится позже. Я могу только предположить, что в 4.0+ мой SurfaceView квантуется до более низкой глубины бит в какой-то момент между его рисованием и отображением, и я могу видеть из захвата экрана, что градиенты набирают 8 значений за раз в Каждый канал, предлагая квантование до 555 (не 565).

Я добавил в функцию Activity onCreate следующее, но это не имело никакого значения.

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

Я также попытался поставить выше в onAttachedToWindow (), но изменений по-прежнему не было.

(Я считаю, что RGBA_8888 является форматом окна по умолчанию в любом случае для версии 2.2 и выше, поэтому не удивительно, что явно установка этого формата не влияет на 4.0+.)

Что оставляет вопрос, если источником является 8888, а пункт назначения – 8888, что вводит квантование / группирование и почему оно появляется только в 4.0+?

Очень озадачительно. Интересно, может ли кто-нибудь пролить свет?

Solutions Collecting From Web of "Цветовой диапазон только для Android 4.0+"

Попробуй …

 BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.ARGB_8888; Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options); findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient)); 

Включение опции эмулятора «Использовать главный GPU» устранила проблемы с цветом для меня, кредит идет на этот ответ https://stackoverflow.com/a/17166234/1287459

В моем случае я использовал Android 4.2.2.