[英]Output Image gives NULL after applying CIFilter
我想使用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;
}
這些是可用的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
)
檢查此鏈接
並嘗試使用以下代碼
CIImage *filteredImage = [invertColour outputImage];
UIImage *newImg = [UIImage imageWithCIImage:filteredImage];
Xcode應該警告您的第一件事是,您正在使用initWithImage:;當您應使用initWithCIImage:時(我猜這是一個錯字)。 其次,您應該將self.imageView.image返回的UIImage轉換為CIImage-請參閱如何將UIImage轉換為CIImage,反之亦然
問題在這一行:
[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]
因為CIDepthOfField
在OS X v10.6和更高版本中可用。
(c)Apple文檔
在iOS設備中,過濾器CIDepthOfField為NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.