Подтвердить что ты не робот

Цветовая гамма только на 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 +?

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

4b9b3361

Ответ 1

Попробуйте...

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));

Ответ 2

Включение эмулятора "Использовать хост-GPU" устраняет проблемы с цветом для меня, кредит идет на этот ответ fooobar.com/info/402015/...

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