Кадрирование CIImage с CICrop не работает должным образом - PullRequest
14 голосов
/ 07 марта 2012

У меня проблемы с обрезкой изображения.Для меня фильтр CICrop не работает должным образом.Если мои CIVector x и y (происхождение) равны 0, все работает нормально (изображение обрезается из левого нижнего угла), изображение обрезается по ширине и высоте моего прямоугольника, но если исходные объекты CIVector (x и y) не равны 0 в моем обрезанном видеизображение становится пробелом (потому что фильтр CICrop обрезается из левого нижнего угла независимо от происхождения (x и y)).

Я обрезаю CIImage с прямоугольником, source :

CIVector *cropRect =[CIVector vectorWithX:150 Y:150 Z: 300 W: 300];

CIFilter *cropFilter = [CIFilter filterWithName:@"CICrop"];   

[cropFilter setValue:myCIImage forKey:@"inputImage"];
[cropFilter setValue:cropRect forKey:@"inputRectangle"];

CIImage *croppedImage = [cropFilter valueForKey:@"outputImage"];

Выходное изображение с CIVector X 150 и Y 150: (я нарисовал границу для ясности)

enter image description here

Выходное изображение сCIVector X 0 и Y 0:

enter image description here

Исходное изображение:

enter image description here

ЧтоЯ делаю не так?Или это должно быть сделано?

Ответы [ 2 ]

28 голосов
/ 11 марта 2012

Вы уверены, что выходное изображение имеет ожидаемый размер?Как вы рисуете выходное изображение?

Фильтр CICrop не уменьшает размер исходного изображения, он просто удаляет нежелательный контент.

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

[image drawAtPoint:NSZeroPoint fromRect:NSMakeRect(150, 150, 300, 300) operation:NSCompositeSourceOver fraction:1.0];

Если вы хотите получить фактический CIImage вместо вывода, просто сделайте это:

9 голосов
/ 23 июня 2012

Важно отметить, что система координат представления находится в верхнем левом углу, а CIImage - в левом нижнем углу.Это сведет вас с ума, если вы не поймете это, когда делаете эти преобразования!Этот другой пост описывает однонаправленное преобразование: Изменение значения CGrect для пользовательской системы координат .

...