Je dois recadrer UIImage
qui est chargé dans UIScrollview
avec quelques rect d'un autre UIView
qui est également dans UIScrollView
Convertir UIScrollViewPoint à UIImage + ZOOM + TOURNER
Suite est Afficher la hiérarchie
--> View
--> UIScrollView
--> viewBase (UIView)
--> UIImageView -> (Zoomed & rotated)
--> UIView (Target View)(Movable User can move anywhere in scrollview to crop rect)
Mon image est Rotation & Agrandissement Je dois obtenir la partie exacte de l'image dans TargetView
Je dessine UIImage
avec rotati sur le context
suivant est le code
CGFloat angleCroppedImageRetreacted = atan2f(self.imgVPhoto.transform.b, self.imgVPhoto.transform.a);
angleCroppedImageRetreacted = angleCroppedImageRetreacted * (180/M_PI);
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.imgVPhoto.image.size.width, self.imgVPhoto.image.size.height)];
rotatedViewBox.transform = CGAffineTransformMakeRotation(-angleCroppedImageRetreacted);
CGSize rotatedSize = rotatedViewBox.frame.size;
UIGraphicsBeginImageContext(rotatedSize);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(bitmap, rotatedSize.width/2.0f, rotatedSize.height/2.0f);
CGContextRotateCTM(bitmap, -angleCroppedImageRetreacted);
CGContextScaleCTM(bitmap, 1.0f, -1.0f);
CGContextDrawImage(bitmap, CGRectMake(-self.imgVPhoto.image.size.width/2.0f,
-self.imgVPhoto.image.size.height/2.0f,
self.imgVPhoto.image.size.width,
self.imgVPhoto.image.size.height),
self.imgVPhoto.image.CGImage);
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Et cela fonctionne très bien. Je reçois pivotée UIImage même que je peux voir dans Simulator
Pour convertir Point de vue cible à UIImage
j'utiliser le code suivant qui ne fonctionne pas
CGPoint imageViewPoint = [self.viewBase convertPoint:self.targetImageview.center toView:self.imgVPhoto];
float percentX = imageViewPoint.x/self.imgVPhoto.frame.size.width;
float percentY = imageViewPoint.y/self.imgVPhoto.frame.size.height;
CGPoint imagePoint = CGPointMake(resultImage.size.width * percentX, resultImage.size.height * percentY);
rect.origin = imagePoint;
//rect.origin.x *= (self.imgVPhoto.image.size.width/self.imgVPhoto.frame.size.width);
//rect.origin.y *= (self.imgVPhoto.image.size.height/self.imgVPhoto.frame.size.height);
imageRef = CGImageCreateWithImageInRect([resultImage CGImage], rect);
img = [UIImage imageWithCGImage:imageRef scale:viewImage.scale orientation:viewImage.imageOrientation];
Je pense que problème est que nous ne pouvons pas utiliser Rect
après transformons Appliquer
S'il vous plaît Aide-moi à recadrer UIImage
qui est zoomée et tourné à partir rect sur la même hiérarchie
Si vous besoin de plus d'informations pls demander
Quelle est votre relation entre la vue cible et affichage de l'image? Je suis sceptique sur le fait que le code de rotation fonctionnera si UIImage a une orientation (essayez de prendre une photo de portrait en cours d'exécution et mettez-la sous plusieurs angles pour confirmer qu'elle fonctionne vraiment). Si vous suspectez que l'extraction de la vue transformée est un problème, utilisez une approche standard où vous enregistrez la transformation actuelle dans une variable locale, définissez la transformation de la vue sur identité, sauvegardez la vue dans une variable locale. –
Malheureusement, l'extraction de coordonnées à partir de la vue déroulante est un peu une procédure d'essai et d'erreur. Puis, tout dessiner dans un contexte graphique peut être gênant et tout s'aggrave lorsque l'image est pivotée. Mais si votre vue est correctement dessinée et que vous voyez déjà exactement ce dont vous avez besoin, vous devriez peut-être envisager de créer un cliché de vue. Supposons que votre vue d'image se trouve sur une autre vue, qui correspond à la taille et à la position de votre vue cible. Créez ensuite un instantané de cette vue à tout moment pour obtenir l'image. Vous voudrez peut-être l'agrandir un peu pour augmenter la taille de l'image de sortie un peu ... –
@MaticOblak cible vue est un petit UIView (Circle) qui est une partie à être ** crop ** signifie qu'il est mobile UIView qui mis par l'utilisateur recadre une partie spécifique dans la vue de l'image –