Составные операции в Android Canvas - PullRequest
7 голосов
/ 31 марта 2010

Я только начинаю с разработки под Android и прихожу из мира JavaScript / HTML, поэтому в настоящее время изучаю возможности Android SDK.

Холст HTML 5 поддерживает составные операции (см. здесь ).

Возможно ли это в Android Canvas? Я сканировал API класса Canvas, но не смог найти ничего полезного. Мне нужна как минимум составная операция «источник-в» или (если это невозможно) «источник-поверх».

Ответы [ 3 ]

9 голосов
/ 05 мая 2010

Композиция обрабатывается путем рисования на Canvas с Paint, который использует PorterDuffXfermode.

Paint p=new Paint();
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
canvas.drawBitmap(bitmap, 0, 0, p);

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

1 голос
/ 01 апреля 2010

Нашел сам. PorterDuffXfermode реализует все эти составные режимы.

1 голос
/ 31 марта 2010

Раньше я не рассматривал подобные операции, но думаю, что есть способ выполнить их, используя форму Rect .Вы можете определить прямоугольники, чтобы отметить, какие области должны быть нарисованы на холсте, а какие - из исходного изображения, а класс Rect имеет некоторые встроенные функции сравнения.Например, чтобы имитировать входной источник, вы можете использовать setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination), чтобы ваш новый прямоугольник имел только пересеченную область двух изображений.Затем вы можете использовать этот прямоугольник в качестве аргумента в одной из команд рисования Canvas, указав ему брать только пиксели из исходного изображения, которые находятся внутри этого прямоугольника.Затем вы управляете рисованием по оси Z в порядке, в котором выполняются команды рисования.

...