Почему фильтр CIGloom Core Image не работает на iOS? - PullRequest
0 голосов
/ 24 февраля 2012

Я хотел бы применить фильтр 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 фильтр не работает здесь?

1 Ответ

1 голос
/ 24 февраля 2012

CIGloom, хотя и присутствует в реализации Core Image для Mac, отсутствует в iOS с 5.0.1.Когда я запускаю следующий запрос:

NSArray *filterNames = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];

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

, основанный на вопросе lms о фильтрах размытия , я получаю следующие встроенные фильтры в 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 прямо сейчас.

Однако, если вам действительно нужен такой фильтр, вы можете написать собственный шейдер для выполнения этого действия, используя мой openисходный код GPUImage framework.Возможно, я добавлю несколько фильтров размытия в течение следующих нескольких дней, но если вам нужно это прямо сейчас, вы можете написать свой собственный фильтр.

...