Нанесение изображения марки вдоль дорожки с Каиром
В рамках моего первоначального исследования, чтобы понять, подходит ли нам Каир, я смотрю, могу ли я получить точку (x,y) на заданном расстоянии от начала пути. Я просмотрел примеры и API Cairo, но не нашел ничего, что могло бы предположить, что это возможно. Было бы больно, если бы нам пришлось создавать собственную реализацию пути Безье с нуля.
На андроид есть класс под названием PathMeasure. Это позволяет получить точку (x,y) на заданном расстоянии от начала пути. Это позволяет мне легко нарисовать штамп на желаемом расстоянии, чтобы получить что-то вроде изображения ниже.
Надеюсь, кто-то может указать мне в правильном направлении.
1 ответ
Если у меня нет полного понимания того, что вы имеете в виду под "путем", кажется, что вы можете выполнить задачу, начав с этого руководства. Вы бы использовали несколько cr
(расположение изображения, вращение, масштаб) и только один image
пример.
Из того, что я могу понять из вашего изображения, вам нужно использовать смешивание (например, альфа-канал), я бы сказал, установка пикселя за пикселем альфа-канала (прозрачность), пропорциональная / такая же, как ваши исходные значения в градациях серого, и все R G B значения пикселей в черный (0).
Для того, чтобы воздействовать непосредственно на ваше входное изображение (на файл, который вы будете загружать), с помощью поиска "конвертировать изображение в градациях серого в альфа", я нашел несколько результатов для Photoshop, некоторые для gimp, я не знаю, что бы вы имели в наличии.
В противном случае вам придется делать прямо в вашем коде доступ к пикселям изображения. Для чтения / редактирования значений пикселей вы можете использовать cairo_image_surface_get_data. Сначала вы должны создать изображение назначения с помощью cairo_image_surface_create, используя формат CAIRO_FORMAT_ARGB32
Точно так же вы можете использовать cairo_mask, рисуя черный прямоугольник размером с ваше изображение, после создания изображения альфа-канала формата CAIRO_FORMAT_A8 из вашего исходного изображения (опять же, доступ к пикселю за пикселем кажется единственным возможным способом, учитывая ограничения cairo_image_surface_create_from_png).
Использование cairo_paint_with_alpha вместо cairo_paint не подходит, потому что альфа-канал будет постоянным для всего изображения.