2014-09-13 17 views
5

Wyobraź sobie, że mam UIImage. Muszę obrócić, a następnie przyciąć go w globalnym układzie współrzędnych (nie w układzie współrzędnych UIImage). Tak więc obrócony obraz zostanie przycięty i.Obracanie i przycinanie UIImage

Jak mogę to zrobić? CGImageCreateWithImageInRect przycina obraz tylko we współrzędnych obrazu.

enter image description here

PS odpowiedzi w komentarzach. Powinieneś użyć CIImage.

Odpowiedz

2

Może to pomóc

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

Właśnie to przetestowałem i zadziałało! Powinienem zauważyć, że obrót afiniczny obraca obraz dookoła niego w lewym dolnym rogu (punkt zerowy układu współrzędnych CIImage), a nie dookoła jego środka, więc powinieneś zachować ostrożność przy współrzędnych przy stosowaniu uprawy. –

+0

Czy możesz opublikować kod, w jaki sposób dokonujesz obliczeń dla someRect? Obracam obraz, ale nie wiem, jak przycinać prostokąt, który chcę, ponieważ po obrocie nie jest on w tym samym miejscu co poprzednio. – NFilip

+0

Nie działa dla mnie. "imageByCroppingToRect" daje mi pusty obraz po zastosowaniu "CGAffineTransform t = CGAffineTransformMakeRotation (degrees);" –

0

Do obrotu, trzeba zastosować

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

ucięcie, wystarczy zmienić ramkę swojego ImageView

Aby przekształcić lokalną coordinates'image, wystarczy użyć:

// 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]; 

Jeśli planujesz zintegrować edytor obrazów z aplikacją, możesz rozważyć użycie strony trzeciej, takiej jak: https://github.com/heitorfr/ios-image-editor

+0

Dziękuję za odpowiedź, ale muszę dostać transformacje do użytku wewnętrznego, a nie dla UIView. –