首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIImage内存泄漏

CIImage内存泄漏
EN

Stack Overflow用户
提问于 2014-03-02 18:31:07
回答 2查看 7.8K关注 0票数 3

我正在使用下面的方法模糊一些图像。使用CIImage的仪器正在泄漏。我试着把它们包装在一个“自动释放池”里,但是没有运气。有什么想法吗?

代码语言:javascript
复制
-(UIImage *)blurImage:(UIImage *)image withStrength:(float)strength
{
    @autoreleasepool {
        CIContext *context = [CIContext contextWithOptions:nil];
        CIImage *inputImage = [[CIImage alloc] initWithCGImage:image.CGImage];
        CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [filter setValue:inputImage forKey:@"inputImage"];
        [filter setValue:[NSNumber numberWithFloat:strength] forKey:@"inputRadius"];

        CIImage *result = [filter valueForKey:kCIOutputImageKey];
        float scale =  [[UIScreen mainScreen] scale];
        CIImage *cropped=[result imageByCroppingToRect:CGRectMake(0, 0, image.size.width*scale, image.size.height*scale)];
        CGRect extent = [cropped extent];
        CGImageRef cgImage = [context createCGImage:cropped fromRect:extent];
        UIImage *returnImage = [UIImage imageWithCGImage:cgImage].copy;

        CGImageRelease(cgImage);

        return returnImage;
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-02 19:47:14

我在分析代码时也看到了同样的漏洞。试一试,这似乎是为了避免泄漏,并给你同样的结果:

代码语言:javascript
复制
- (UIImage*)blurImage:(UIImage*)image withStrength:(float)strength
{
    @autoreleasepool {
        CIImage* inputImage = [[CIImage alloc] initWithCGImage:image.CGImage];
        CIFilter* filter = [CIFilter filterWithName:@"CIGaussianBlur"];
        [filter setValue:inputImage forKey:@"inputImage"];
        [filter setValue:[NSNumber numberWithFloat:strength] forKey:@"inputRadius"];

        CIImage* result = [filter valueForKey:kCIOutputImageKey];
        float scale = [[UIScreen mainScreen] scale];
        CIImage* cropped = [result imageByCroppingToRect:CGRectMake(0, 0, image.size.width * scale, image.size.height * scale)];

        return [[UIImage alloc] initWithCIImage:cropped];
    }
}
票数 7
EN

Stack Overflow用户

发布于 2014-03-02 18:44:59

你试过把CIImages变成零吗?

代码语言:javascript
复制
-(UIImage *)blurImage:(UIImage *)image withStrength:(float)strength
{      
       //your code
       CGImageRelease(cgImage);

       cropped=nil;
       result = nil;
       inputImage = nil;
       context = nil;

       return returnImage;
     }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22131595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档