iOS CIFilter的RAW图像内存问题(Objective-C)

问题描述 投票:0回答:1

我正在将CIFilter应用于RAW图像,但是当我尝试在UIImageView中显示它时,我遇到了一些内存问题。我通过使用以下代码应用CIFilter:

CIFilter *rawshadow = [CIFilter filterWithImageURL:initialImageUrl options:@{kCIInputBoostShadowAmountKey: [NSNumber numberWithFloat:self.shadowsSlider.value],kCIInputScaleFactorKey: [NSNumber numberWithFloat:1]}];
currentImage = rawshadow.outputImage;

然后,我通过使用以下内容更新UIImageView:

-(void) UpdatePreview{
    CIContext *context = [CIContext contextWithOptions:@{kCIContextCacheIntermediates: [NSNumber numberWithBool:NO], kCIContextPriorityRequestLow:[NSNumber numberWithBool:YES]}];
    CGImageRef cgImage = [context createCGImage:currentImage fromRect:[currentImage extent]];
    UIImage* img = [UIImage imageWithCGImage:cgImage];
    CGImageRelease(cgImage);
    [self.mainImageView setImage:img];
}

运行UpdatePreview后,RAM峰值增加到2GB并崩溃。我使用的原始图像是6000x4000,大约24MB。是太大还是我错过了什么?预先感谢您的帮助。

ios objective-c core-image
1个回答
0
投票

即使您没有使用CIFilter,将大于显示所需的图像分配给图像视图也是always错误。您的图片视图不是6000x4000,因此您的图片应该不是。实际上,your图像不是6000x4000:它不是12000x8000,甚至不是18000x12000,因为您将CGImage转换为UIImage的方式不正确(您使用的是scale的隐式[1],而不是设置[ C0])。难怪你要崩溃了。

以所需的尺寸处理原始图像,或减小图像尺寸作为过滤器链的一部分,以便输出图像是实际在界面中显示所需的尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.