Фотосъемка с использованием UIImagePickerController - PullRequest
3 голосов
/ 09 января 2010

Я снимаю с камеры iPhone, используя класс UIImagePickerController.

Я использую этот метод делегата для получения изображения.

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

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

}

Но когда я использую это изображение в ImageView или отправляю данные изображения на какой-либо URL, изображение выглядит повернутым на 90 градусов.

В чем проблема? Я делаю это правильно?

Спасибо

1 Ответ

6 голосов
/ 04 марта 2010

Вам нужно повернуть изображение самостоятельно в зависимости от вашей ориентации.

Используйте этот код (он также может изменить размер вашей картинки). Я нашел его где-то в сети, но не могу вспомнить, где:

@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
...