Custom image mask in iOS

2019-01-16 22:18发布

I have a issue with masking images. I do game "puzzle" and have to make custom images. I found and tried 2 way of custom cropping:

  1. Using CALayer.mask property.
  2. Using UIImage.mask property.

In first option i create my custom path, then assign it to CAShapeLayer.path property, then assign CAShapeLayer to CALayer.mask property. At the end i have custom cropped image. In second option i use firstly use CGImageMaskCreate() method (i use previously created black mask images of puzzle), then CGContextClipToMask(). In either options i have problem with performance (mostly when i crop image into 16 puzzles and drag in over the screen).

Is there any other approaches to crop image in custom way. (I don't know how to solve performance problem). Thanks in advance.

3条回答
Bombasti
2楼-- · 2019-01-16 22:29

Try this:

-(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];
查看更多
▲ chillily
4楼-- · 2019-01-16 22:48

Maybe you should consider about drawing the image in a new image with an alpha background an overdrawing the current background. I mean: All pixel which are inside the jigsaw piece: normal colour, all pixels outside the jigsaw piece = transparent. And then try to blend it to the new background or overdrawing it.

Just my 2 cents. :)

查看更多
登录 后发表回答