Фильтры 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]
всегда будут какие-то бессмысленные фигуры. Используйте оригинальный прямоугольник или прямоугольник, который вы хотите видеть, и он, скорее всего, будет работать правильно.