2012-04-09 22 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 
} 
相关问题