I have created a view in which there is a capture button. When i click on that button camera screen is opening. but Image taken in Portrait is distorted when viewed in Landscape. How to get actual image without distortion?
Asked
Active
Viewed 873 times
2
-
probably you haven't set autosizing properties propely. – HarshIT Apr 09 '12 at 09:37
2 Answers
4
if you working on the ios 5 then you have to manually call this function when u capture the image and store in to the photos .
- (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];
}

parag
- 657
- 1
- 6
- 17
2
You need to customize the image in the landscape orientation to the center of the view,
in shouldAutorotateToInterfaceOrientation
method
try like this:
if(interfaceOrientation == UIInterfaceOrientationLandscapeRight || UIInterfaceOrientationLandscapeLeft)
{
here customize the rect of your image
}

rohan-patel
- 5,772
- 5
- 45
- 68

Charan
- 4,940
- 3
- 26
- 43