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

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

13
задан threeshinyapples 21 March 2012 в 20:04
поделиться