Как установить перспективу изображения - PullRequest
0 голосов
/ 12 октября 2009

Я работаю в Mac OS X, 10,6

Как настроить перспективу изображения для любого изображения?

Я не хочу использовать CoreImage.

Возможно ли это сделать через NSAffineTransforms.

С уважением, Dhana.

Ответы [ 3 ]

1 голос
/ 12 октября 2009

Для решения, которое не использует CoreImage, вам нужно реализовать преобразование самостоятельно. Это не может быть сделано как аффинное преобразование. Эта статья объясняет процесс довольно хорошо.

Если вы не можете кодировать его самостоятельно, вы можете посмотреть другие сторонние библиотеки, которые реализуют перспективное преобразование. Одним из таких вариантов будет ImageMagick . Они предлагают перспективное преобразование в виде утилиты командной строки, а также имеют C API, который вы можете использовать для получения той же функциональности в своей собственной программе.

0 голосов
/ 12 октября 2009

Еще один способ обработки перспективы на вашем изображении - применить трехмерное преобразование с перспективой, используя Core Animation. Вы можете поместить свое изображение в CALayer (как содержимое этого слоя) или отложить назад свой NSImageView. Я описываю, как создать и применить перспективный CATransform3D к слою в этом ответе , но ключ заключается в том, чтобы установить для элемента m34 CATransform3D отрицательную дробь, чтобы создать эффект перспективы. У Майка есть запись об этом здесь , а также пример кода .

0 голосов
/ 12 октября 2009

Вы не можете выразить перспективное преобразование с помощью аффинного преобразования. Однако в CoreImage вы можете использовать ImageUnit (имя CoreImage для того, что вы обычно называете «фильтром»), чтобы выполнить перспективное преобразование изображения (и многих других интересных вещей).

См. CIPerspectiveTransform и ознакомьтесь с разделом о фильтрах CoreImage в руководстве разработчика CoreImage. Это должно помочь вам.

В основном то, что вы делаете, это ...

perspectiveTransform = [CIFilter filterWithName:@"CIPerspectiveTransform"];
[perspectiveTransform setDefaults];
[perspectiveTransform setValue: myCIImage forKey: @"inputImage"];
[perspectiveTransform setValue: myToLeft forKey: @"inputTopLeft"];
// ... also set inputTopRight, inputBottomLeft and inputBottomRight
// if you have the coordinates of the corner points you can create
// CIVector instances with 
// + (CIVector *)vectorWithX:(CGFloat)x Y:(CGFloat)y
// ...
result = [perspectiveTransform valueForKey: @"outputImage"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...