У меня проблема с графикой Android. Я занимаюсь разработкой игр и мне нужно отображать изображения, некоторые из которых имеют цветовые градиенты. Моя проблема в том, что когда я загружаю растровые изображения (в формате png) с градиентами, изображения отображаются с артефактом полосы. И это на Android 4. Я исследовал множество постов, касающихся этой проблемы, и попробовал множество решений, включая:
Дизеринг изображения на входе
BitmapFactory.Options factoryOptions =
new BitmapFactory.Options();
factoryOptions.inDither = true;
...
background = BitmapFactory.decodeResource( resources, R.drawable.game_page_background, factoryOptions );
Загрузка изображения из «res / raw» вместо «res / drawable»
Проверка формата отображения моего дисплея в формате: Bitmap Config ARGB_8888
Загрузка изображения из каталога ресурсов с использованием входного потока.
Я предположил, что Решения 2 и 4 должны были предотвратить "оптимизацию" образа Android, которая (опять же, я полагаю) создает артефакт. Но ни одно из решений не работает. Артефакт остается независимо от того, как я загружаю растровое изображение. В конце концов мне пришлось сделать ужасный обходной путь, который должен был пропустить шум в изображение с помощью фотошопа. Очевидно, это ужасный обходной путь.
Может ли кто-нибудь из этого сообщества дать какой-либо дополнительный совет относительно того, как получить растровые изображения с градиентами для плавного рендеринга в Android без артефактов полосатости?
Следующие фрагменты кода показывают, как я сгенерировал эти тестовые изображения ...
КОД ФРАГ **
...
InputStream is = null;
try
{
is = ((Activity)gameMngr).getAssets().open("test_background_3.png");
}
catch( IOException ioe)
{
Log.d(TAG, "TEST CODE: Unable to open resources. ");
}
this.background = BitmapFactory.decodeStream(is);
...
// ELSEWHERE
...
canvas.drawBitmap( this.background, 0, 0, null );
...
КОНЕЦ ФРАГ **