Страницы

Поиск по вопросам

суббота, 22 июня 2019 г.

Как нарисовать рваную линию?

Есть ли возможность, стандартная, а если и нет, то скажите, как можно нарисовать рваную линию, похожу на баллончик, или рваную кисть, которая не полностью зарисовывает область, а как бы оставляет след. Я реализовываю такую вот штуку. Заранее, спасибо за помощь.
[Обновление] Задача упростилась, теперь просто нужно узнать как рисовать линию изображением.


Ответ

Я так понимаю, единственный вариант это накладывать одно и то же изображение снова и снова, каждый раз, когда курсор смещается.
В том примере, который у вас просто рисуется одно и то же изображение, именно так, как я описал в комментарии выше. просто изображение необычной формы и по краям, судя по всему есть полупрозрачные пиксели.
если предположить, что у вас есть заднее изображение и переднее. то вам надо по клику в переднем изображении создавать прозрачный кусок установленной формы. вот пример с SO как это сделать
// get access to the image bytes CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
// create a buffer to hold the mask values size_t width = CGImageGetWidth(image.CGImage); size_t height = CGImageGetHeight(image.CGImage); uint8_t *maskData = malloc(width * height);
// iterate over the pixel data, reading the alpha value uint8_t *alpha = (uint8_t *)CFDataGetBytePtr(pixelData) + 3; uint8_t *mask = maskData; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { *mask = *alpha; mask++; alpha += 4; // skip to the next pixel } }
// create the mask image from the buffer CGDataProviderRef maskProvider = CGDataProviderCreateWithData(NULL, maskData, width * height, NULL); CGImageRef maskImage = CGImageMaskCreate(width, height, 8, 8, width, maskProvider, NULL, false);
// cleanup CFRelease(pixelData); CFRelease(maskProvider); free(maskData);
Потом, чтобы все это запустить сделать:
CGImageRef subtractedImage = CGImageCreateWithMask(b.CGImage, maskImage);
Еще добавлю, что этот фокус скорее всего будет есть очень много ресурсов для большой картинки. может есть смысл поделить на несколько маленьких.

Комментариев нет:

Отправить комментарий