2013-06-23 8 views
0

Я создаю много цветовых вариаций изображения с использованием Core Graphics. Мне нужно создать около 320 в общей сложности, но постепенно использование памяти приложения увеличивается до тех пор, пока оно не сработает. Из инструментов я вижу, что больше объектов CGImage создаются и остаются в живых. Я хочу освободить их, потому что я храню изображения в каталоге кеша в формате PNG.UIGraphicsBeginImageContext созданное изображение остается в памяти навсегда

Я искал все другие решения, которые я смог найти без успеха. Любая помощь приветствуется. Благодарю.

Вот основная часть:

+(UIImage *)tintedImageFromImage:(UIImage *)sourceImage colour:(UIColor *)color intensity:(float)intensity { 

    if (UIGraphicsBeginImageContextWithOptions != NULL) { 

     UIGraphicsBeginImageContextWithOptions(sourceImage.size, NO, 0.0); 

    } else { 

     UIGraphicsBeginImageContext(sourceImage.size); 
    } 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGRect rect = CGRectMake(0, 0, sourceImage.size.width, sourceImage.size.height); 

    // draw alpha-mask 
    CGContextSetBlendMode(context, kCGBlendModeNormal); 
    CGContextDrawImage(context, rect, sourceImage.CGImage); 

    // draw tint color, preserving alpha values of original image 
    CGContextSetBlendMode(context, kCGBlendModeSourceIn); 
    [color setFill]; 
    CGContextFillRect(context, rect); 


    //Set the original greyscale template as the overlay of the new image 
    sourceImage = [self verticallyFlipImage:sourceImage]; 
    [sourceImage drawInRect:CGRectMake(0,0, sourceImage.size.width,sourceImage.size.height) blendMode:kCGBlendModeMultiply alpha:intensity]; 

    UIImage *colouredImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    colouredImage = [self verticallyFlipImage:colouredImage]; 


    return colouredImage; 
} 

это используется, чтобы перевернуть изображение:

+(UIImage *)verticallyFlipImage:(UIImage *)originalImage { 

    UIImageView *tempImageView = [[UIImageView alloc] initWithImage:originalImage]; 

    UIGraphicsBeginImageContext(tempImageView.frame.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, tempImageView.frame.size.height); 

    CGContextConcatCTM(context, flipVertical); 

    [tempImageView.layer renderInContext:context]; 

    UIImage *flippedImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return flippedImage; 
} 

ответ

0

Добавить в verticallyFlipImage линии tempImageView.image = nil; для того, чтобы сделать релиз просмотра изображения размер изображения. Это решает проблему.