Пользовательская маска изображения в iOS - PullRequest
5 голосов
/ 04 мая 2011

У меня проблема с маскировкой изображений. Я делаю игру «головоломка» и должен делать пользовательские изображения Я нашел и попробовал 2 способа пользовательской обрезки:

  1. Использование свойства CALayer.mask.
  2. Использование свойства UIImage.mask.

В первом варианте я создаю свой собственный путь, затем присваиваю его свойству CAShapeLayer.path, затем присваиваю CAShapeLayer свойству CALayer.mask. В конце у меня есть обычай обрезанное изображение. Во втором варианте я вначале использую метод CGImageMaskCreate() (я использую ранее созданные черные пазлы), затем CGContextClipToMask(). В любом из этих вариантов у меня проблемы с производительностью (в основном, когда я обрезаю изображение на 16 головоломок и перетаскиваю его по экрану).

Есть ли другие подходы для обрезки изображения по-своему. (Я не знаю, как решить проблему производительности). Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 04 мая 2011

Существует множество UIImage-категорий, которые вы можете использовать для этого. Дайте мне минутку, и я выложу здесь несколько ссылок:

0 голосов
/ 13 марта 2012

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

Только мои 2 цента. :)

0 голосов
/ 04 мая 2011

Попробуйте это:

-(UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);

    UIImage *cropped = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);

    return cropped;
}

...

UIImage *temp_image = [self imageByCropping:original_image toRect:clipping_rectangle];
...