2010-01-09 4 views
3

Je prends des photos de la caméra de l'iPhone en utilisant la classe UIImagePickerController. J'utilise cette méthode de délégué pour obtenir l'image.Prendre une image en utilisant UIImagePickerController

- (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info 
{ 

     UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

} 

Mais quand je me sers de cette image dans un ImageView ou d'envoyer les données d'image à une URL, l'image apparaît en rotation de 90 degrés.

Quel est le problème? Est-ce que je le fais correctement?

Merci

Répondre

6

Vous devez faire pivoter l'image vous en fonction de votre orientation.

Utilisez ce code (il peut aussi redimensionner votre image) Je l'ai trouvé quelque part dans le filet, mais ne peut pas se rappeler où:

@implementation UIImage (Resizing) 

static inline double radians (double degrees) {return degrees * M_PI/180;} 


- (UIImage*)imageByScalingToSize:(CGSize)targetSize { 
UIImage* sourceImage = self; 
CGFloat targetWidth = targetSize.width; 
CGFloat targetHeight = targetSize.height; 

CGImageRef imageRef = [sourceImage CGImage]; 
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); 
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef); 

if (bitmapInfo == kCGImageAlphaNone) { 
    bitmapInfo = kCGImageAlphaNoneSkipLast; 
} 

CGContextRef bitmap; 

if (sourceImage.imageOrientation == UIImageOrientationUp || sourceImage.imageOrientation == UIImageOrientationDown) { 
    bitmap = CGBitmapContextCreate(NULL, targetWidth, targetHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo); 

} else { 
    bitmap = CGBitmapContextCreate(NULL, targetHeight, targetWidth, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo); 

}  

if (sourceImage.imageOrientation == UIImageOrientationLeft) { 
    CGContextRotateCTM (bitmap, radians(90)); 
    CGContextTranslateCTM (bitmap, 0, -targetHeight); 

} else if (sourceImage.imageOrientation == UIImageOrientationRight) { 
    CGContextRotateCTM (bitmap, radians(-90)); 
    CGContextTranslateCTM (bitmap, -targetWidth, 0); 

} else if (sourceImage.imageOrientation == UIImageOrientationUp) { 
    // NOTHING 
} else if (sourceImage.imageOrientation == UIImageOrientationDown) { 
    CGContextTranslateCTM (bitmap, targetWidth, targetHeight); 
    CGContextRotateCTM (bitmap, radians(-180.)); 
} 

CGContextDrawImage(bitmap, CGRectMake(0, 0, targetWidth, targetHeight), imageRef); 
CGImageRef ref = CGBitmapContextCreateImage(bitmap); 
UIImage* newImage = [UIImage imageWithCGImage:ref]; 

//CGContextRelease(bitmap); 
//CGImageRelease(ref); 

return newImage; 
} 

@end 
Questions connexes