2012-04-09 15 views
2

キャプチャボタンがあるビューを作成しました。そのボタンをクリックすると、カメラの画面が開きます。 Landscapeで見たときにPortraitで撮影された画像はゆがんで表示されます。 歪みのない実際の画像を取得するにはどうすればよいですか?風景で見たときにポートレートで撮影された画像がゆがんで表示される

+0

おそらく、自動サイズ変更のプロパティを適切に設定していない可能性があります。 – HarshIT

+0

いくつかのコードを投稿してください。 –

答えて

4

イメージをキャプチャして写真に格納するときにこの関数を手動で呼び出すことができます。

- (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方法

で はこのようにしてみてください、ビューの中央に横向きで画像をカスタマイズする必要があります。そして、あなたが持っているあなたは、IOS 5で作業している場合

if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || UIInterfaceOrientationLandscapeLeft) 

{ 
    here customize the rect of your image 
} 
関連する問題