2012-04-09 80 views
2

我創建了一個有捕捉按鈕的視圖。當我點擊那個按鈕相機屏幕打開。但在縱向中查看時,縱向拍攝的圖像會失真。 如何獲得沒有失真的實際圖像?在風景中查看時拍攝的人像是扭曲的

+0

可能你還沒有設置autosizing屬性propely。 – HarshIT 2012-04-09 09:37:03

+0

發佈一些代碼。 – 2012-04-09 09:44:49

回答

4

,如果你在iOS 5,那麼你必須工作當您捕捉圖像並存儲到照片中時手動調用此功能。

- (UIImage *)fixOrientation : (UIImage *)img 
{ 
if (img.imageOrientation == UIImageOrientationUp) return img; 
CGAffineTransform transform = CGAffineTransformIdentity; 

switch (img.imageOrientation) { 
    case UIImageOrientationDown: 
    case UIImageOrientationDownMirrored: 
     transform = CGAffineTransformTranslate(transform, img.size.width, img.size.height); 
     transform = CGAffineTransformRotate(transform, M_PI); 
     break; 

    case UIImageOrientationLeft: 
    case UIImageOrientationLeftMirrored: 
     transform = CGAffineTransformTranslate(transform, img.size.width, 0); 
     transform = CGAffineTransformRotate(transform, M_PI_2); 
     break; 

    case UIImageOrientationRight: 
    case UIImageOrientationRightMirrored: 
     transform = CGAffineTransformTranslate(transform, 0, img.size.height); 
     transform = CGAffineTransformRotate(transform, -M_PI_2); 
     break; 
} 

switch (img.imageOrientation) { 
    case UIImageOrientationUpMirrored: 
    case UIImageOrientationDownMirrored: 
     transform = CGAffineTransformTranslate(transform, img.size.width, 0); 
     transform = CGAffineTransformScale(transform, -1, 1); 
     break; 

    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRightMirrored: 
     transform = CGAffineTransformTranslate(transform, img.size.height, 0); 
     transform = CGAffineTransformScale(transform, -1, 1); 
     break; 
} 

CGContextRef ctx = CGBitmapContextCreate(NULL, img.size.width, img.size.height, 
             CGImageGetBitsPerComponent(img.CGImage), 0, 
             CGImageGetColorSpace(img.CGImage), 
             CGImageGetBitmapInfo(img.CGImage)); 
CGContextConcatCTM(ctx, transform); 
switch (img.imageOrientation) { 
    case UIImageOrientationLeft: 
    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRight: 
    case UIImageOrientationRightMirrored: 
     // Grr... 
     CGContextDrawImage(ctx, CGRectMake(0,0,img.size.height,img.size.width), img.CGImage); 
     break; 

    default: 
     CGContextDrawImage(ctx, CGRectMake(0,0,img.size.width,img.size.height), img.CGImage); 
     break; 
} 

CGImageRef cgimg = CGBitmapContextCreateImage(ctx); 
UIImage *img1 = [UIImage imageWithCGImage:cgimg]; 
CGContextRelease(ctx); 
CGImageRelease(cgimg); 
return img1; 

} 




- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
self.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
snapimage.image = [self fixOrientation:self.image]; 

} 
- (void)imagePickerController:(UIImagePickerController *)picker1 
    didFinishPickingImage:(UIImage *)image1 
       editingInfo:(NSDictionary *)editingInfo 
{ 

[picker1 dismissModalViewControllerAnimated:YES]; 
snapimage.image = [self fixOrientation:image1]; 
} 
2

您需要在橫向自定義圖像視圖的中心, 在shouldAutorotateToInterfaceOrientation方法

嘗試這樣的:

if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || UIInterfaceOrientationLandscapeLeft) 

{ 
    here customize the rect of your image 
}