AvoidXferMode для замены цвета на холсте - PullRequest
4 голосов
/ 15 января 2010

Я пытаюсь заменить цвет для чего-то, что нарисовано на холсте, используя AvoidXferMode . Из документации на андроид похоже, что это именно то, что мне нужно:

AvoidXfermode xfermode будет рисовать src везде, кроме верхней части opColor или, в зависимости от режима, рисовать только поверх opColor.

Я пытаюсь что-то вроде этого:

Paint paint = new Paint();
paint.setColor(Color.RED);
canvas.drawPaint(paint); // actually drawing a bitmap here
paint.setXferMode(new AvoidXferMode(Color.RED, 0, TARGET);
paint.setColor(Color.GREEN);
canvas.drawPaint(paint);

Однако, это просто дает красный экран, а не зеленый, как я ожидал (заменив красный на зеленый). Я предполагаю, что упускаю момент, где ... Есть предложения?

Ответы [ 2 ]

5 голосов
/ 17 июня 2010

Я наконец-то выяснил, в чем проблема, здесь есть несколько подсказок: AvoidXferMode Tolerance , но меня действительно поразило, когда я прочитал этот пост http://stuffthathappens.com/blog/2010/06/04/android-color-banding/ Эрика Бёрка Ошибка допуска, потому что холст вида не находится в режиме 8888.

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

К сожалению, ссылка на пост Эрика мертва, но у Романа Гая также есть аналогичная запись здесь: http://www.curious -creature.org / 2010/12/08 / bitmap-quality-banding-and-dithering /

0 голосов
/ 31 марта 2010

У меня сейчас такая же проблема, но я заработал, указав вместо 255 допуск. В соответствии с документацией API это неправильно (он должен рисовать пункт назначения ВЕЗДЕ с этим параметром полной точности), но по какой-то причине значение 255 делает именно то, что должно делать значение 0.

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