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.

La rotation d'un CGImage

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)

La rotation d'un CGImage

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