2014-09-13 5 views
5

Представьте, что у меня есть UIImage. Мне нужно повернуть, а затем обрезать его в глобальной системе координат (а не в системе координат UIImage). Таким образом, полученное изображение будет обрезано и повернуто.Поворот и обрезка UIImage

Как я могу это сделать? CGImageCreateWithImageInRect обрезает изображение только в координатах изображения.

enter image description here

PS Ответ в комментариях. Вы должны использовать CIImage.

ответ

2

Может быть, это может помочь

//init 
CIImage *image = [CIImage imageWithCGImage:CGImageRef]; 
//rotation 
CIImage *rotatedImage = [image imageByApplyingTransform:someTransform]; 
//crop 
CIImage *croppedImage = [rotatedImage imageByCroppingToRect:someRect]; 
+0

Я только что протестировал его, и он сработал! Я должен отметить, что вращение Аффинца вращает изображение вокруг его нижнего левого угла (нулевая точка системы координат CIImage), а не вокруг его центра, поэтому вы должны быть осторожны с координатами при применении урожая. –

+0

Можете ли вы опубликовать код, как вы делаете расчет для someRect? Я поворачиваю изображение, но я не могу понять, как обрезать прямоугольник я хочу, потому что после вращения он не находится в том же месте, что и раньше. – NFilip

+0

Не работает для меня. «imageByCroppingToRect» дает мне пустое изображение после применения «CGAffineTransform t = CGAffineTransformMakeRotation (градусов)»; –

0

Для вращения, необходимо применить

CGAffineTransform transform = CGAffineTransformTranslate(self.imageView.transform,deltaX,deltaY); 
transform = CGAffineTransformRotate(transform, recognizer.rotation); 
transform = CGAffineTransformTranslate(transform, -deltaX, -deltaY); 
self.imageView.transform = transform; 

Для обрезки, просто измените кадр вашего ImageView

Для преобразования локального coordinates'image, просто используйте:

// converts a point in local coordinate space to window coordinates. 
[self.imageView convertPoint:localPosition toView:nil]; 

// use this method to calculate a view's origin in window space like this: 
[self.imageView convertPoint:self.imageView.frame.origin toView:nil]; 

Если вы планируете интегрировать редактор изображений в свое приложение, вы можете рассмотреть возможность использования третьего лица, например: https://github.com/heitorfr/ios-image-editor

+0

Спасибо за ваш ответ, но мне нужно, чтобы получить преобразования для внутреннего использования, а не для UIView. –