问题
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:
- Using
CALayer.mask
property. - 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.
回答1:
There are lots of UIImage-categories out there you can use for this. Give me a moment and I'll post some links here:
- Cropping an UIImage (not really a category though, but it'll fit)
- UIImage: Resize, then Crop
- https://sites.google.com/a/injoit.com/knowledge-base/for-developers/graphics/uiimage-routines-scaling-cropping-rotating-etc
- http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/
- http://maybelost.com/2010/11/cropping-a-uiimage-on-iphone/
回答2:
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];
回答3:
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. :)
来源:https://stackoverflow.com/questions/5880597/custom-image-mask-in-ios