На эмуляторах под управлением 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 +?
Очень озадачительно. Интересно, может ли кто-нибудь пролить свет?