Цветная полоса только на Android 4.0+ - PullRequest
13 голосов
/ 22 марта 2012

На эмуляторах под управлением 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 ]

2 голосов
/ 21 ноября 2012

Попробуй дис ..

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));
0 голосов
/ 30 июля 2013

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

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

...