CIFilter работает неправильно, возвращает null-изображение

Эй, все, что я использовал некоторые фильтры. Не все из них, похоже, работают нормально, например, например, CISepiaTone и CIHueAdjust. Недавно я попробовал фильтр CIGLoom, и он возвращает нулевое изображение.

-(UIImage*)getGloom:(UIImage*)anImage{ CGImageRef cgimage = anImage.CGImage; CIImage *cimage = [CIImage imageWithCGImage:cgimage]; CIFilter *filter = [CIFilter filterWithName:@"CIGloom"]; [filter setDefaults]; [filter setValue: cimage forKey: @"inputImage"]; [filter setValue: [NSNumber numberWithFloat: 25] forKey: @"inputRadius"]; [filter setValue: [NSNumber numberWithFloat: 0.75] forKey: @"inputIntensity"]; CIContext *context = [CIContext contextWithOptions:nil]; CIImage *ciimage = [filter outputImage]; CGImageRef cgimg = [context createCGImage:ciimage fromRect:[ciimage extent]]; UIImage *uimage = [UIImage imageWithCGImage:cgimg scale:1.0f orientation:UIImageOrientationUp]; CGImageRelease(cgimg); return uimage; } 

Я действительно получил этот код от мирового турне techtalk в этом году, и он работает для CISepiaTone, но он просто терпит неудачу в отношении сигары. cicolorposterize, ciedges и некоторые другие. Кто-нибудь понял, почему? или как обойти это NUll IMAGE?

CIGloom и другие, с которыми у вас возникли проблемы, пока не поддерживаются в iOS. Вы можете проверить, какие фильтры у вас есть, используя этот массив:

 NSArray *supportedFilters = [CIFilter filterNamesInCategory:kCICategoryBuiltIn]; 

Да, кажется, что некоторые фильтры пока недоступны для iOS. Имел такой же интересный опыт при чтении документации. Однако вы можете проверить код, чтобы узнать, какой фильтр доступен для iOS, как и выше. Некоторые фильтры, например, CIVingette, которые я не нашел в документации, я сделал это, чтобы получить значения-параметры для каждого доступного фильтра для iOS на 5.1.

 NSArray *supportedFilters = [CIFilter filterNamesInCategory:kCICategoryBuiltIn]; for (CIFilter *filter in supportedFilters) { NSString *string = [NSString stringWithFormat:@"%@",[[CIFilter filterWithName:(NSString *)filter] inputKeys]]; NSLog(@"%@ %@", filter, string); } 

Ответ:

 ...
 2012-04-19 14: 02: 55.597 ImageFiltering [12190: 707] CIVibrance (
     inputImage,
     inputAmount
 )
 2012-04-19 14: 02: 55.599 ImageFiltering [12190: 707] CIVignette (
     inputImage,
     inputIntensity,
     inputRadius
 )
 2012-04-19 14: 02: 55.601 ImageFiltering [12190: 707] CIWhitePointAdjust (
     inputImage,
     inputColor
 )
 ...

Обратите внимание, что в будущем (или кто-то уже знает, могли бы вы больше узнать об этом), вы, вероятно, захотите прочитать документацию. Это только я играю в детектив, чтобы обойти его, потому что я не нашел никакой документации по некоторым фильтрам, как я упоминал ранее.

Вот пример, который я получил с CIVingette из предыдущей информации:

 - (void) displayVingetteFilterWithImage {
     // Получаем изображение и устанавливаем его как CIImage
     NSString * filePath = [[NSBundle mainBundle] pathForResource: @ "image_1" ofType: @ "jpg"];
     NSURL * fileNameAndPath = [NSURL fileURLWithPath: filePath];
     CIImage * image = [CIImage imageWithContentsOfURL: fileNameAndPath];

     // Создать контекст 
     CIContext * imageContext = [CIContext contextWithOptions: nil];

     // Установите фильтр для изображения, в этом случае CIVignette, зная, что он использует inputImage, inputIntensity и inputRadius из предыдущего log-response.
     CIFilter * vignette = [Фильтр CIFilterWithName: @ "CIVignette"];
     [виньетка setDefaults];
     [vignette setValue: изображение дляKey: @ "inputImage"];
     [vignette setValue: [NSNumber numberWithFloat: 5.0] forKey: @ "inputIntensity"];
     [vignette setValue: [NSNumber numberWithFloat: 30.0] forKey: @ "inputRadius"];

     // Прикрепите CIImage к CGImageRef и прикрепите его как UIImage
     CIImage * result = [vignette valueForKey: @ "outputImage"];
     CGImageRef cgImageRef = [imageContext createCGImage: result fromRect: [result extent]];
     UIImage * targetImage = [UIImage imageWithCGImage: cgImageRef];

     // Прикрепите UIImage к UIImageView в self.view, а также разместите его, просто для удовольствия.
     UIImageView * imageView = [[UIImageView alloc] initWithImage: targetImage];
     [self.view addSubview: imageView];
     [imageView setImage: targetImage];
     imageView.frame = CGRectMake (0.0, 10.0, imageView.frame.size.width, imageView.frame.size.height);

     // Релиз CGImageRef, который мы создали ранее.
     CGImageRelease (CGImageRef);
 } 
  • AVErrorInvalidVideoComposition = -11841
  • Каково влияние производительности на использование armv7 при компиляции приложения iOS?
  • MKMapView - удаление аннотаций приводит к сбою приложения
  • Новый Facebook SDK для iOS 6 имеет проблемы с сбоем в iOS 5
  • Кто-нибудь нашел хороший способ использования новых событий клавиатуры iOS5?
  • Должен ли я освобождать переменные экземпляра и свойства в dealloc?
  • Поддержка значков iOS 5.0 с XCode 5
  • основанное на местоположении push-уведомление, когда приложение не запущено?
  • CFBundleDisplayName возвращает 'null'
  • Перекрытие сеттеров с дуговыми и динамическими свойствами
  • Знаете, бесплатно ли загружено приложение iOS для пользователей или бесплатно?
  • Interesting Posts

    CALayer autoresizingMask не для SDK для iOS?

    Пользовательский заголовок UITableView исчезает после предупреждения о памяти

    Возобновление воспроизведения видео AVPlayer после активации приложения

    UIImage imageNamed: автоматически не выбирает сетчатки @ 2x изображения

    Концепция концептуального дизайна BattleShip Game IOS

    Изменение цвета навигационных элементов по всему приложению?

    Автозаполнение имени пользователя и пароля в UIWebView

    drawRect и addSubview: пользовательский рисунок влияет на какие виды?

    Swift: как установить значение типа функции в необязательную переменную?

    Как переименовать виджет iOS 8 Today?

    В чем основное преимущество использования SFSafariViewController?

    Как проверить, может ли контроллер просмотра выполнить сеанс

    Внутренняя ошибка STTwitter CFNetwork NSURLRequest

    Каталог документов Objective C продолжает меняться на устройстве

    Содержимое UIView размыто, когда я его сосредотачиваю

    Давайте будем гением компьютера.