Общая Android полупрозрачная ошибка - PullRequest
6 голосов
/ 28 сентября 2011

Я использую сглаживание, чтобы сделать мои изображения более плавными. При использовании сглаживания вокруг изображений будет нарисована темная рамка. Это происходит потому, что Android использует черный цвет и смешивает его с желтым на изображениях. Это наследственная проблема! Когда я рисую прямоугольник и устанавливаю альфа-значение на 127, изображение также становится тихим и темным. Вместо использования черного Android следует использовать белый для рисования прозрачности.

Есть ли способ, как я могу решить эту проблему?

Пример исходного кода для рисования полупрозрачного прямоугольника на холсте. Прямоугольник также темный, но он должен быть ярким.

Bitmap bmp = Bitmap.createBitmap(200, 200, Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
Paint rPaint = new Paint();
rPaint.setColor(Color.parseColor("#F7E836"));
rPaint.setAlpha(127);
rPaint.setStyle(Paint.Style.FILL);
canvas.drawRect(0, 0, 100, 100, rPaint);

Изображения представляют собой графику SVG, которая отображается с помощью следующей библиотеки: http://code.google.com/p/svg-android/

Я думаю, что нашел ошибку. Проблема в SurfaceView. Его фон черный. Та же полупрозрачная ошибка возникает, когда я использую приведенный выше код и отображаю его в ImageView, а цвет фона элемента пользовательского интерфейса за ImageView - черный. Цвет фона SurfaceView всегда черный. Если я изменю это на белый с setBackgroundColor, SurfaceView станет белым, но белый фон будет нарисован НАД всеми моими другими изображениями, нарисованными с помощью OpenGL. Я думаю, что они должны быть переключены. Сначала следует нарисовать цвет фона, а затем материал OpenGL.

1 Ответ

2 голосов
/ 01 октября 2011

Опубликуйте ссылки на оригинальные исходные изображения и покажите, как вы их сглаживаете (код).

Когда изображение сглажено, алгоритм вставит цвета между цветами, составляющими края.Так что с вашим изображением желтой звезды, если фон был белым, он попытается добавить пиксели по краю, которые находятся между желтым и белым (более светлый оттенок желтого).Это то, что «сглаживает» изображение.

Но если изображение имеет индексированное цветовое пространство, эти более светлые оттенки желтого цвета, вероятно, не существуют в палитре изображений, и в результате вы можете получить практически любойдругой цвет на его месте, какой бы цвет в индексе не попадал на вычисленное значение индекса.

Изображение в вашем вопросе является индексированным png и, следовательно, имеет эту проблему.

Если это проблема, то вам нужно преобразовать ваши исходные изображения в неиндексированное цветовое пространство или сглаживать их до индексации изображений, что не работает, если изображения должныбыть масштабированным вашим приложением или, если вам нужно сглаживание на разных фонах.

Другая вещь, которая может произойти, это то, что ваш сглаживание на другом фоне, чем вы думаете, особенно желтыйЕсли звезда была чёрной, то сглаживание корректно сглаживается, и опубликовать код - самый простой способ выяснить это.

...