La rotation d'un CGImage
J'ai une UIImage que je suis à partir d'un UIImagePickerController. Lorsque je reçois l'image de la - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
méthode je l'ai mis directement dans une UIImageView pour la prévisualisation et la donner à l'utilisateur la possibilité d'enregistrer ou de supprimer l'image.
Lorsque l'utilisateur sélectionne l'option enregistrer l'application de la png de données pour l'image et l'enregistre à son répertoire documents. Mais ce qui se passe sous l'un des 2 appareil orientations (paysage uniquement) est que l'image est enregistrée à l'envers (plus précisément, une rotation de 180 degrés de ce qu'il devrait être). Alors, quand je charge l'image dans la galerie, il apparaît à l'envers.
(Voir en bas à gauche de l'image dans la galerie)
J'ai travaillé cet être que les données d'image brutes dans le UIImage de la UIImagePickerController n'est pas en rotation, plutôt, l'orientation est stockée comme une propriété sur l'objet et uniquement lors de l'affichage. Donc j'essaye de faire tourner le CGImage associés à la UIImage à l'aide du code que j'ai trouvé en ligne. Mais il semble avoir absolument aucun effet sur l'image. Le code que j'utilise suit:
- (void)rotateImage:(UIImage*)image byRadians:(CGFloat)rads
{
//calculate the size of the rotated view's containing box for our drawing space
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,image.size.width, image.size.height)];
CGAffineTransform t = CGAffineTransformMakeRotation(rads);
rotatedViewBox.transform = t;
CGSize rotatedSize = rotatedViewBox.frame.size;
//Create the bitmap context
UIGraphicsBeginImageContext(rotatedSize);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
//Move the origin to the middle of the image you want to rotate and scale around the center.
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
//Rotate the image context
CGContextRotateCTM(bitmap, rads);
//Now, draw the rotated/scaled image into the context
CGContextScaleCTM(bitmap, 1.0, -1.0);
CGContextDrawImage(bitmap, CGRectMake(image.size.width / 2, image.size.height / 2, image.size.width, image.size.height), [image CGImage]);
image = UIGraphicsGetImageFromCurrentImageContext();
image = [UIImage imageWithCGImage:image.CGImage scale:1.0 orientation:UIImageOrientationDown];
UIGraphicsEndImageContext();
}
Je voudrais savoir pourquoi ce code ne fonctionne pas, puisque chaque morceau de code que j'ai trouver en ligne pour ce faire, la rotation de l'image semble ne pas fonctionner.
OriginalL'auteur null0pointer | 2012-05-11
Vous devez vous connecter pour publier un commentaire.
utilisation de celui-ci .. il fonctionne parfaitement ! Juste assurez-vous que vous utilisez cette fonction lorsque vous prenez des images à partir de UIImagePicker:
exemple:
Assurez-vous d'utiliser cette fonction à la place où vous prenez des photos à partir de documents répertoire.
return img;
" est appelé avant "[img release];
" (ce qui signifie la libération d'appel n'a en fait jamais hits). Aussi, cela suppose que la personne n'est pas à l'aide de l'ARC.OriginalL'auteur Dream.In.Code
Rotation et Miroir UIImage CGImage de Données de Sauvegarde - Swift
Récemment, j'ai voulu corriger une
UIImage
soutenu par uneCGImage
pour correspondre à l'orientation souhaitée plutôt que de compter sur les Api de respecter les UIImageOrientation paramètre.OriginalL'auteur Cameron Lowell Palmer
J'ai reçu votre problème.Vous avez à retraduire le contexte à l'aide
CGContextTranslateCTM(context, -rotatedSize.width/2, -rotatedSize.height/2);
ainsi que de définir l'origine de rect dans le dessin de rotatedViewBox.cadre.de l'origine.x,rotatedViewBox.cadre.de l'origine.y.utilisez ce code.
OriginalL'auteur Tushar Jain
La Swift 3 version pour le Cameron Lowell Palmer répondre:
Utilisation:
OriginalL'auteur Enrique