ORStudios
ORStudios

Reputation: 3233

Memory Increase When Masking Image

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

Answers (2)

From Apple Documentation:

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

Anoop Vaidya
Anoop Vaidya

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

Related Questions