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

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

Ответы на вопрос(2)

Ваш ответ на вопрос