2015-10-21 2 views
1
+ (CGImageRef) newFliteredCGImage:(CGImageRef)image withCIFilter:(CIFilter*)filter { 
    CIImage* input_image = [CIImage imageWithCGImage:image]; 
    NSSize image_size = NSMakeSize(CGImageGetWidth(image), 
            CGImageGetHeight(image)); 

    [filter setValue:input_image forKey:kCIInputImageKey]; 
    CIImage* output_image = [filter valueForKey:kCIOutputImageKey]; 

    CGColorSpaceRef color_space = CGColorSpaceCreateDeviceRGB(); 
    CGContextRef bitmap_context 
    = CGBitmapContextCreate(nil, 
          image_size.width, 
          image_size.height, 
          8, 
          image_size.width * 4, 
          color_space, 
          (CGBitmapInfo)kCGImageAlphaNoneSkipFirst); 
    CGColorSpaceRelease(color_space); 

    CIContext* ci_bitmap_context 
    = [CIContext contextWithCGContext:bitmap_context 
           options:nil]; 
    [ci_bitmap_context drawImage:output_image 
          inRect:[output_image extent] 
         fromRect:(CGRect){CGPointZero, image_size}]; 

    CGImageRef result_img = CGBitmapContextCreateImage(bitmap_context); 

    CGContextRelease(bitmap_context); 

    return result_img; 
} 

CGImageRef параметра и CGImageRef Return является выпущен CGImageRelease но имеет утечку памятиCIContext утечки памяти

Я думаю CIContext есть проблемы, но я не могу найти проблему

Пожалуйста, дайте мне помочь

ответ

1

Делайте это в @autoReleasePool ..

+ (CGImageRef) newFliteredCGImage:(CGImageRef)image withCIFilter:(CIFilter*)filter { 

@autoreleasepool { 
CIImage* input_image = [CIImage imageWithCGImage:image]; 
NSSize image_size = NSMakeSize(CGImageGetWidth(image), 
           CGImageGetHeight(image)); 

[filter setValue:input_image forKey:kCIInputImageKey]; 
CIImage* output_image = [filter valueForKey:kCIOutputImageKey]; 

CGColorSpaceRef color_space = CGColorSpaceCreateDeviceRGB(); 
CGContextRef bitmap_context 
= CGBitmapContextCreate(nil, 
         image_size.width, 
         image_size.height, 
         8, 
         image_size.width * 4, 
         color_space, 
         (CGBitmapInfo)kCGImageAlphaNoneSkipFirst); 

CIContext* ci_bitmap_context 
= [CIContext contextWithCGContext:bitmap_context 
          options:nil]; 
[ci_bitmap_context drawImage:output_image 
         inRect:[output_image extent] 
        fromRect:(CGRect){CGPointZero, image_size}]; 

CGImageRef result_img = CGBitmapContextCreateImage(bitmap_context); 

return result_img; 

} 
} 

надежда, что ч elps you ..

+0

Благодарим за помощь! – WOF

+0

Мой друг. – Garry

Смежные вопросы