Reputation: 3233
I am using the following code to create a masked UIImage. I am finding however that when i run the code multiple times the memory is increasing and not releasing. Can someone see where there may be a leak?
-(UIImage*)processImage:(UIImage *)sourceImage maskImage:(UIImage *)maskImage {
UIImage *editedImage = nil;
UIImage *mask = [self createMaskImage:maskImage canvasImage:sourceImage maskWidth:50 maskHeight:50];
editedImage = [self maskImage:sourceImage withMask:mask];
return editedImage;
}
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
return [UIImage imageWithCGImage:masked];
}
Upvotes: 0
Views: 74
Reputation: 25692
An image created by masking image with mask. You are responsible for releasing this object by calling CGImageRelease.
- (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef masked = CGImageCreateWithMask([image CGImage], mask);
// Create image from CGImageRef
UIImage *myImage = [UIImage imageWithCGImage:masked];
// Release it
CGImageRelease(masked);
return myImage;
}
Upvotes: 2
Reputation: 46563
Since you are using CoreGraphics, ARC will not work for you.
You are creating / allocating with CGImageCreateWithMask
.
Then you need to remove it with CGImageRelease
.
Upvotes: 2