【问题标题】:Why doesn't the CIGloom Core Image filter work on iOS?为什么 CIGloom Core Image 过滤器在 iOS 上不起作用?
【发布时间】:2013-04-03 02:00:31
【问题描述】:

我想使用以下代码将CIGloom 过滤器应用于我的 iOS 应用程序中的图像:

CIFilter * ciEffectFilter = [CIFilter filterWithName:@"CIGloom"];
[ciEffectFilter setDefaults];
[ciEffectFilter setValue:myimage forKey:@"inputImage"];
[ciEffectFilter setValue:[NSNumber numberWithFloat: 0.75] forKey:@"inputIntensity"];
[ciEffectFilter setValue:[NSNumber numberWithFloat: 20] forKey:@"inputRadius"];

CIImage * outputImage = [filter valueForKey:@"outputImage"];
CGImageRef gimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];            
CGImageRelease(cgimg);
myImageView.image =  newImg;

但这不起作用。它只会给我一个空白图像。

当我使用CIHueAdjust 过滤器尝试使用以下代码进行类似操作时:

    CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust"];  
    [filter setDefaults];  
    [filter setValue:foreciImage forKey:@"inputImage"];  
    [filter setValue:[NSNumber numberWithFloat: 3.0f] forKey:@"inputAngle"];  

    CIImage *outputImage = [filter outputImage];
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]];
    UIImage *newImg = [UIImage imageWithCGImage:cgimg];    

它按预期运行。

为什么我的CIGloom Core Image 过滤器在这里不起作用?

【问题讨论】:

  • CIGloom 适用于当前版本的 iOS (iOS6)

标签: ios5 core-image


【解决方案1】:

CIGloom,虽然出现在 Mac 的 Core Image 实现中,但在 iOS 5.0.1 中不存在。当我运行以下查询时:

NSArray *filterNames = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];

NSLog(@"Built in filters");
for (NSString *currentFilterName in filterNames)
{
    NSLog(@"%@", currentFilterName);
}

基于lms' question about blur filters 我在iOS 5.0.1 中获得了以下内置过滤器:

CIAdditionCompositing
CIAffineTransform
CICheckerboardGenerator
CIColorBlendMode
CIColorBurnBlendMode
CIColorControls
CIColorCube
CIColorDodgeBlendMode
CIColorInvert
CIColorMatrix
CIColorMonochrome
CIConstantColorGenerator
CICrop
CIDarkenBlendMode
CIDifferenceBlendMode
CIExclusionBlendMode
CIExposureAdjust
CIFalseColor
CIGammaAdjust
CIGaussianGradient
CIHardLightBlendMode
CIHighlightShadowAdjust
CIHueAdjust
CIHueBlendMode
CILightenBlendMode
CILinearGradient
CILuminosityBlendMode
CIMaximumCompositing
CIMinimumCompositing
CIMultiplyBlendMode
CIMultiplyCompositing
CIOverlayBlendMode
CIRadialGradient
CISaturationBlendMode
CIScreenBlendMode
CISepiaTone
CISoftLightBlendMode
CISourceAtopCompositing
CISourceInCompositing
CISourceOutCompositing
CISourceOverCompositing
CIStraightenFilter
CIStripesGenerator
CITemperatureAndTint
CIToneCurve
CIVibrance
CIVignette
CIWhitePointAdjust

CIGloom 不在其中,CIHueAdjust 在其中,这就是为什么后者有效而前者无效的原因。您现在无法在 iOS 上使用 Core Image 执行此过滤操作。

但是,如果您真的需要这样的过滤器,您可以使用我的开源 GPUImage 框架编写自定义着色器来执行此操作。在接下来的几天里,我可能会添加一些模糊滤镜,但如果你现在需要这个,你可以编写自己的滤镜。

【讨论】:

  • 谢谢...它非常全面和详细..看起来我们 ned 2 很难做到...哈哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
相关资源
最近更新 更多