您的位置:首页 > 产品设计 > UI/UE

IOS-解决自定义UIImagePickerController 后的图片翻转问题

2014-07-03 10:00 501 查看
使用自定义UIImagePickerController,拍照后得到的图片显示的是翻转的图片,使用下列的方法可调整过来
//图片旋转
- (UIImage *)fixOrientation:(UIImage *)aImage
{
// No-op if the orientation is already correct
if (aImage.imageOrientation ==
UIImageOrientationUp)
return aImage;

// We need to calculate the proper transformation to make the image upright.
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
CGAffineTransform transform =
CGAffineTransformIdentity;

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

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

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

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

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

// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage),
0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case
UIImageOrientationLeft:
case
UIImageOrientationLeftMirrored:
case
UIImageOrientationRight:
case
UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx,
CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
break;

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

// And now we just create a new UIImage from the drawing context
CGImageRef cgimg =
CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage
imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: