【问题标题】:Output Image gives NULL after applying CIFilter应用 CIFilter 后输出图像给出 NULL
【发布时间】:2013-09-20 06:52:24
【问题描述】:

我想用CIImage framework对图像进行效果,当我为此设置参数时,输出图像显示空白图像。

有什么建议吗?

用于应用过滤器的代码如下:

- (IBAction)filterImage:(id)sender {

    CIImage *rawImageData;
    rawImageData =[[CIImage alloc] initWithImage:self.imageView.image];

    CIFilter *filter = [CIFilter filterWithName:@"CIDepthOfField"];
    [filter setDefaults];

    [filter setValue:rawImageData forKey:@"inputImage"];

    [filter setValue:[CIVector vectorWithCGPoint:CGPointMake(50, 50)]
              forKey:@"inputPoint1"];

    [filter setValue:[CIVector vectorWithCGPoint:CGPointMake(100, 100)]
              forKey:@"inputPoint2"];

    [filter setValue:[NSNumber numberWithFloat:15.00]
              forKey:@"inputSaturation"];    

    [filter setValue:[NSNumber numberWithFloat:15.00]
              forKey:@"inputUnsharpMaskRadius"];

    [filter setValue:[NSNumber numberWithFloat:15.70]
              forKey:@"inputRadius"];



    CIImage *filteredImageData = [filter valueForKey:@"outputImage"];

    UIImage *filteredImage = [UIImage imageWithCIImage:filteredImageData];
    self.imageView.image = filteredImage;


}

【问题讨论】:

    标签: iphone ios ciimage


    【解决方案1】:

    这些都是可用的iOS过滤器,我们可以使用

    NSArray *filterNamesArray = [CIFilter filterNamesInCategories:[NSArray arrayWithObject:kCICategoryBuiltIn]];
    
      $1 = 0x071b8560 <__NSArrayI 0x71b8560>(
        CIAdditionCompositing,
        CIAffineClamp,
        CIAffineTile,
        CIAffineTransform,
        CIBarsSwipeTransition,
        CIBlendWithMask,
        CIBloom,
        CIBumpDistortion,
        CIBumpDistortionLinear,
        CICheckerboardGenerator,
        CICircleSplashDistortion,
        CICircularScreen,
        CIColorBlendMode,
        CIColorBurnBlendMode,
        CIColorControls,
        CIColorCube,
        CIColorDodgeBlendMode,
        CIColorInvert,
        CIColorMap,
        CIColorMatrix,
        CIColorMonochrome,
        CIColorPosterize,
        CIConstantColorGenerator,
        CICopyMachineTransition,
        CICrop,
        CIDarkenBlendMode,
        CIDifferenceBlendMode,
        CIDisintegrateWithMaskTransition,
        CIDissolveTransition,
        CIDotScreen,
        CIEightfoldReflectedTile,
        CIExclusionBlendMode,
        CIExposureAdjust,
        CIFalseColor,
        CIFlashTransition,
        CIFourfoldReflectedTile,
        CIFourfoldRotatedTile,
        CIFourfoldTranslatedTile,
        CIGammaAdjust,
        CIGaussianBlur,
        CIGaussianGradient,
        CIGlideReflectedTile,
        CIGloom,
        CIHardLightBlendMode,
        CIHatchedScreen,
        CIHighlightShadowAdjust,
        CIHoleDistortion,
        CIHueAdjust,
        CIHueBlendMode,
        CILanczosScaleTransform,
        CILightenBlendMode,
        CILightTunnel,
        CILinearGradient,
        CILineScreen,
        CILuminosityBlendMode,
        CIMaskToAlpha,
        CIMaximumComponent,
        CIMaximumCompositing,
        CIMinimumComponent,
        CIMinimumCompositing,
        CIModTransition,
        CIMultiplyBlendMode,
        CIMultiplyCompositing,
        CIOverlayBlendMode,
        CIPinchDistortion,
        CIPixellate,
        CIRadialGradient,
        CIRandomGenerator,
        CISaturationBlendMode,
        CIScreenBlendMode,
        CISepiaTone,
        CISharpenLuminance,
        CISixfoldReflectedTile,
        CISixfoldRotatedTile,
        CISmoothLinearGradient,
        CISoftLightBlendMode,
        CISourceAtopCompositing,
        CISourceInCompositing,
        CISourceOutCompositing,
        CISourceOverCompositing,
        CIStarShineGenerator,
        CIStraightenFilter,
        CIStripesGenerator,
        CISwipeTransition,
        CITemperatureAndTint,
        CIToneCurve,
        CITriangleKaleidoscope,
        CITwelvefoldReflectedTile,
        CITwirlDistortion,
        CIUnsharpMask,
        CIVibrance,
        CIVignette,
        CIVortexDistortion,
        CIWhitePointAdjust
        )
    

    【讨论】:

    • 我使用了您提供的列表中的 CIDotScreen,它对我有用。顺便说一句,CIDepth 不在列表中,因此它可能适用于 MAC OS。
    【解决方案2】:

    查看link

    并尝试使用以下代码

      CIImage *filteredImage = [invertColour outputImage];
      UIImage *newImg = [UIImage imageWithCIImage:filteredImage];
    

    【讨论】:

    • 我试过这个解决方案,但静止图像显示空白图像。
    【解决方案3】:

    无论如何,Xcode 应该警告您的第一件事是,您在使用 initWithImage: 时应该使用 initWithCIImage:(我猜这是一个错字)。其次,您应该将 self.imageView.image 返回的 UIImage 转换为 CIImage - 请参阅How to Convert UIImage to CIImage and vice versa

    【讨论】:

      【解决方案4】:

      问题出在这一行:

      [filter setValue:[CIVector vectorWithCGPoint:CGPointMake(100, 100)]
                forKey:@"inputPoint2"];
      

      CIDepthOfField 中没有属性(键)@"inputPoint2"。

      文档: https://developer.apple.com/library/mac/documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html#//apple_ref/doc/filter/ci/CIDepthOfField 错了。

      使用@"inputPoint0" 和@"inputPoint1" 就可以了。

      要检查 CIFiter 属性,请使用:

      [sampleFilterObject attributes]
      

      【讨论】:

        【解决方案5】:

        因为CIDepthOfField

        在 OS X v10.6 及更高版本中可用。

        (c) Apple 文档

        过滤器 CIDepthOfField 在 iOS 设备中为 NULL

        【讨论】:

        猜你喜欢
        • 2015-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 2015-06-23
        • 2013-09-17
        • 1970-01-01
        相关资源
        最近更新 更多