2013-07-29 26 views
1

我使用UIImagePickerController从图片库中选取图像。我使用风景和肖像编辑图像。当我选择一张图像时,它将显示正确的人像方向,但在横向模式下,它会显示上下颠倒。我提到了一些代码。但仍然无法正常工作。我提到这个链接iphone : image captured from camera changes orientation拍摄图像后图像上下颠倒

代码:

-(void)pick:(id)sender{ 


      imagePicker=[[UIImagePickerController alloc]init]; 

      imagePicker.delegate = self; 

      imagePicker.allowsEditing =NO; 

      imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

      // imagePicker.sourceType=UIImagePickerControllerSourceTypeSavedPhotosAlbum; 


      // [self presentModalViewController:imagePicker animated:YES]; 

      [self presentViewController:imagePicker animated:YES completion:nil]; 

} 

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


newImage = [[UIImageView alloc] initWithImage:[info objectForKey:UIImagePickerControllerOriginalImage]]; 




    [newImage setFrame:CGRectMake(0, 0, 320, 568)]; 

    [newImage setUserInteractionEnabled:YES]; 

[self.view addSubview:newImage]; 

    [picker dismissViewControllerAnimated:YES completion:nil]; 

UIDeviceOrientation curDeviceOrientation = [[UIDevice currentDevice] orientation]; 

    switch (curDeviceOrientation) { 
     case UIDeviceOrientationPortrait: 

      NSLog(@"port"); 
      newImage.image = [ newImage.image imageRotatedByDegrees:0]; 
      break; 
     case UIDeviceOrientationPortraitUpsideDown: 
      newImage.image = [ newImage.image imageRotatedByDegrees:180]; 
      break; 
     case UIDeviceOrientationLandscapeLeft: 

      NSLog(@"Left"); 
      newImage.image = [ newImage.image imageRotatedByDegrees:0]; 
      break; 
     case UIDeviceOrientationLandscapeRight: 
      newImage.image = [ newImage.image imageRotatedByDegrees:90]; 
      break; 
     case UIDeviceOrientationFaceUp: 
     case UIDeviceOrientationFaceDown: 
     default: 
      break; // leave the layer in its last known orientation 
    } 

} 

- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees 
{ 
    // calculate the size of the rotated view's containing box for our drawing space 
    UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.width, self.size.height)]; 

    CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees)); 
    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 so we will rotate and scale around the center. 
    CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); 

    // // Rotate the image context 
    CGContextRotateCTM(bitmap, DegreesToRadians(degrees)); 

    // Now, draw the rotated/scaled image into the context 
    CGContextScaleCTM(bitmap, 1.0, -1.0); 
    CGContextDrawImage(bitmap, CGRectMake(-self.size.width/2, -self.size.height/2, self.size.width, self.size.height), [self CGImage]); 

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 

} 

回答

0

试试这个。

在你的类,

@interface NonRotatingUIImagePickerController : UIImagePickerController 

@end 

@implementation NonRotatingUIImagePickerController 

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

@implementation YOUR_CLASS 

UIImagePickerController *imgPicker; 

- (void)viewDidLoad 
{ 
    imgPicker = [[NonRotatingUIImagePickerController alloc] init]; 
} 

-(IBAction)clickForPhoto:(id)sender 
{ 
    imgPicker.delegate = self; 

    imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    [self presentViewController:imgPicker animated:YES completion:nil]; 
} 

希望这会帮助你。

谢谢。

+0

不适合我 – MobileMon

1

经过一番研究后,如果您使用向上指向的音量按钮(自然方式,imo)拍摄照片,则横向图像将显示为颠倒。这是由于相机的传感器不知道您的手机是横向还是横向。它建立在假设“直立”方向是音量按钮指向下方的方向上。