gpt4 book ai didi

ios - CIFilters 导致应用程序崩溃

转载 作者:行者123 更新时间:2023-11-29 03:24:59 25 4
gpt4 key购买 nike

我需要有关如何在内存上高效使用 CIFilter 的建议。基本上,我将两个过滤器链接在一起。棘手的部分是我必须先将 UIImage 转换为 CIImage,然后再调用过滤器。代码贴在下面:

CIImage *foreground = [CIImage imageWithCGImage:first.CGImage options:nil];
CIImage *background = [CIImage imageWithCGImage:second.CGImage options:nil];

CIFilter *softLightBlendFilter = [CIFilter filterWithName:@"CISoftLightBlendMode"];
[softLightBlendFilter setDefaults];
[softLightBlendFilter setValue:foreground forKey:kCIInputImageKey];
[softLightBlendFilter setValue:background forKey:kCIInputBackgroundImageKey];

CIImage *result = [softLightBlendFilter outputImage];

foreground = nil;
background = nil;
softLightBlendFilter = nil;

CIFilter *gammaAdjustFilter = [CIFilter filterWithName:@"CIGammaAdjust"];
[gammaAdjustFilter setDefaults];
[gammaAdjustFilter setValue:result forKey:kCIInputImageKey];
[gammaAdjustFilter setValue:[NSNumber numberWithFloat:value] forKey:@"inputPower"];
result = [gammaAdjustFilter valueForKey:kCIOutputImageKey];

gammaAdjustFilter = nil;

CIContext *context = [CIContext contextWithOptions:nil];
CGRect extent = [result extent];
CGImageRef cgImage = [context createCGImage:result fromRect:extent];

UIImage *image = [UIImage imageWithCGImage:cgImage scale:1.0 orientation:first.imageOrientation];

CFRelease(cgImage);
result = nil;

return image;

并且此代码很容易将内存占用高达 200MB,这将导致应用程序崩溃。

那我做错了什么?我该如何解决这个问题?

最佳答案

调用 image.CGImage 会将图像加载到内存中。

您可以尝试使用

CIImage *ciImage = [CIImage imageWithContentsOfURL:imageUrl options:@{kCIImageColorSpace:[NSNull null]}];

CIImage *ciImage = [CIImage imageWithCGImage:first.CGImage options:nil];

代替

CIImage *ciImage = [CIImage imageWithCGImage:uiImage.CGImage options:nil];

另一个选项是平铺图像,在平铺上应用滤镜,然后再次将它们缝合在一起。

关于ios - CIFilters 导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20562716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com