Фильтры CILightTunnel и CIKaleidoscope

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

- (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 и предупреждение о попытке заменить объект массива значением nil.

Мой код для 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];
}

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

1 ответ

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

Другие вопросы по тегам