2013-11-12 2 views
0

Я могу создать фильтр CIGausianBlur, используя локальное изображение. Теперь я пытаюсь создать фильтр CIKaleidoscope и CILightTunnel, используя тот же формат. Мой код Калейдоскоп фильтра:CILightTunnel и CIKaleidoscope Filters

- (UIImage *)applyKaleidoscopeToImage:(UIImage *)image { 

    CIContext *context = [CIContext contextWithOptions:nil]; 
    CIImage *ci_image = [CIImage imageWithCGImage:image.CGImage]; 
    CIFilter *filter = [CIFilter filterWithName:@"CIKaleidoscope"]; 
    [filter setValue:ci_image forKey:kCIInputImageKey]; 
    [filter setValue:@55 forKey:kCIInputAngleKey]; 
    CIVector *civ = [CIVector vectorWithX:50 Y:50]; 
    [filter setValue:civ forKey:kCIInputCenterKey]; 
    CIImage *result = [filter valueForKey:kCIOutputImageKey]; 
    CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]]; 

    return [UIImage imageWithCGImage:cgImage scale:image.scale orientation:image.imageOrientation]; 
} 

Для этого метода я получаю неперехваченное исключение типа NSException и предупреждения о попытке заменить Objet массив с нулевой стоимостью.

Мой код CILightFilter выглядит следующим образом:

- (UIImage *)applyLightTunnelToImage:(UIImage *)image { 

    CIContext *context = [CIContext contextWithOptions:nil]; 
    CIImage *ci_image = [CIImage imageWithCGImage:image.CGImage]; 
    CIFilter *filter = [CIFilter filterWithName:@"CILightTunnel"]; 
    [filter setValue:ci_image forKey:kCIInputImageKey]; 

    CIVector *civ = [CIVector vectorWithX:50 Y:50]; 
    [filter setValue:civ forKey:kCIInputCenterKey]; 

    [filter setValue:@5 forKey:kCIInputRadiusKey]; 

    //[filter setValue:@45 forKey:kCIInputAngleKey]; 

    CIImage *result = [filter valueForKey:kCIOutputImageKey]; 
    CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]]; 

    return [UIImage imageWithCGImage:cgImage scale:image.scale orientation:image.imageOrientation]; 
} 

я получаю тот же результат ноль здесь. Заранее благодарим за помощь!

+0

У вас будет более легкое время для исправления этой ошибки, если вы сможете точно определить, где это происходит. Попробуйте установить [контрольная точка исключения] (https://developer.apple.com/library/ios/recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html) в Xcode. Если вы все еще не можете исправить свою проблему, как только обнаружите, что эта строка выходит из строя, обновите свой вопрос с помощью этой информации, и вы с большей вероятностью получите хороший ответ. – rickster

+0

CIImage, результат равен нулю. Таким образом, CoreImage не отправляет данные. – Jack120

ответ

0

Поскольку оба являются разрушительными фильтрами, параметр прямой [result extent] будет всегда иметь какие-то бессмысленные цифры. Используйте оригинальный прямоугольник или прямоугольник, который хотите видеть, и он, скорее всего, будет работать правильно.