Core Image CIPerspectiveTransform Filter: как использовать CIVectors?

Мне очень трудно найти документацию в Интернете, которая четко объясняет, как правильно использовать фильтр CIPerspectiveTransform от Core Image. В частности, при установке значений CIVector для inputTopLeft , inputTopRight , inputBottomRight и inputBottomLeft , что эти векторы делают с изображением? (То есть, какова математика за тем, как эти векторы искажают мой образ?)

В настоящее время это код, который я использую. Он не падает, но не показывает изображение:

 CIImage *myCIImage = [[CIImage alloc] initWithImage:self.image]; CIContext *context = [CIContext contextWithOptions:nil]; CIFilter *filter = [CIFilter filterWithName:@"CIPerspectiveTransform" keysAndValues:@"inputImage", myCIImage, @"inputTopLeft", [CIVector vectorWithX:118 Y:484], @"inputTopRight", [CIVector vectorWithX:646 Y:507], @"inputBottomRight", [CIVector vectorWithX:548 Y:140], @"inputBottomLeft", [CIVector vectorWithX:155 Y:153], nil]; CIImage *outputImage = [filter outputImage]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; UIImage *transformedImage = [UIImage imageWithCGImage:cgimg]; [self setImage:transformedImage]; CGImageRelease(cgimg); 

Следует отметить и другие важные моменты:

  • Мой UIImageView (75pts x 115 pts) уже инициализирован с помощью awakeFromNib и уже имеет связанное с ним изображение (151px x 235px).

  • Вышеупомянутый код реализуется в UIImageView - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event . Надеюсь, что я смогу настроить перспективу изображения на основе экранных координат, поэтому он выглядит так, как изображение перемещается в трехмерном пространстве.

  • Этот код предназначен для iPhone-приложения.

Опять же, вопрос, который, я думаю, я спрашиваю, это то, что делают различные векторы параметров, но я могу задавать неправильный вопрос.

Следующая публикация очень похожа, но спрашивает, почему его образ исчезает, а не как использовать CIVectors для CIPerspectiveTransform. Он также получил очень мало сцепления, возможно, потому что он слишком общий: как я могу использовать фильтр CIPerspectiveTransform

Когда я прокомментировал связанный вопрос, CIPerspectiveTransform недоступен в реализации iOS Core Image с iOS 5.1 . Вот почему вы и другой искатель не видели никакого изображения в результате, потому что, скорее всего, ваш CIFilter был нулевым.

Если вы просто хотите реализовать форму перспективы на изображении, есть два разных быстрых способа сделать это на iOS, как я опишу в этом ответе . Один из них – просто использовать правильный тип CATransform3D на уровне UIImageView, но это полезно только для отображения, а не для настройки изображения.

Второй способ – манипулировать изображением с использованием соответствующей матрицы трехмерного преобразования в OpenGL ES. Как я указываю в вышеприведенном ответе, у меня есть среда с открытым исходным кодом, которая обертывает все это, и в примере FilterShowcase есть пример применения перспективы для входящего видео. Вы можете легко поменять видео вход с вашим изображением и захватить изображение из него после применения эффекта перспективы.

  • Изменение языка приложения iphone с помощью кнопок и без перезапуска приложения
  • настройка view.accessibilityElements со встроенными контроллерами представлений
  • Получение имени пользователя через MDM путем настройки параметров Enterprise App (AirWatch)
  • Почему мы проверяем if (cell == nil) в UITableViewController?
  • По умолчанию Splash Screen не удается получить формат региона
  • AFNetworking 3.0 AFHTTPSessionManager с использованием NSOperation
  • Как ускорить переходы iOS и segues?
  • UIView alpha против UIColor alpha
  • Как запустить асинхронный процесс в NSOperation
  • Как заменить isMirrored с isVideoMirrored
  • Получить срок действия подписки для покупки в приложении - начиная с appStoreReceiptURL
  • Interesting Posts

    Изменение представления после addSubview, что такое хорошая практика?

    Запись видео с использованием пользовательской камеры автоматически в swift 3.0

    Правильный способ определения ширины UITableViewCell для сгруппированных пользовательских ячеек?

    Не удается получить доступ к Swift var из контроллера Objective-C View – iOS

    Как сделать приложение iOS локализованным без раскадровки?

    UISlider в UITableView не отвечает на салфетку

    Динамические свойства в области

    Swift – CLGeocoder reverseGeocodeLocation завершение закрытия Handler

    Нет такого модуля 'OneSignal'

    Теперь Apple включила FTS в стандартную / встроенную библиотеку sqlite?

    Использование атрибута свойства «копировать» для сохранения неизменяемого NSString

    Как сделать собственное расширение клавиатуры снова первым ответчиком

    Диапазон возврата с первым и последним символом в строке

    потоковое аудио через UDP с помощью CocoaAsyncSocket в быстрой

    window.opener не установлен в iOS Chrome

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