tags:

views:

497

answers:

1

Hello All,

How to save image in Landscape mode. Iam Picking image from camera in landscape mode then scaleAndRotateImage but it get strech code for scaleAndRotateImage is:

int kMaxResolution = 420;  

CGImageRef imgRef = image.CGImage;  

CGFloat width = CGImageGetWidth(imgRef);  
CGFloat height = CGImageGetHeight(imgRef);  

CGAffineTransform transform = CGAffineTransformIdentity;  
CGRect bounds = CGRectMake(0, 0, width, height);  
if (width > kMaxResolution || height > kMaxResolution) {  
    CGFloat ratio = width/height;  
    if (ratio > 1) {  
        bounds.size.width = kMaxResolution;  
        bounds.size.height = bounds.size.width / ratio;  
    }  
    else {  
        bounds.size.height = kMaxResolution;  
        bounds.size.width = bounds.size.height * ratio;  
    }  
}  

CGFloat scaleRatio = bounds.size.width / width;  
CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));  
CGFloat boundHeight;  
UIImageOrientation orient = image.imageOrientation;  
switch(orient) {  

    case UIImageOrientationUp: //EXIF = 1  
        transform = CGAffineTransformIdentity;  
        break;  

    case UIImageOrientationUpMirrored: //EXIF = 2  
        transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);  
        transform = CGAffineTransformScale(transform, -1.0, 1.0);  
        break;  

    case UIImageOrientationDown: //EXIF = 3  
        transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);  
        transform = CGAffineTransformRotate(transform, M_PI);  
        break;  

    case UIImageOrientationDownMirrored: //EXIF = 4  
        transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);  
        transform = CGAffineTransformScale(transform, 1.0, -1.0);  
        break;  

    case UIImageOrientationLeftMirrored: //EXIF = 5  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);  
        transform = CGAffineTransformScale(transform, -1.0, 1.0);  
        transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);  
        break;  

    case UIImageOrientationLeft: //EXIF = 6  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);  
        transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);  
        break;  

    case UIImageOrientationRightMirrored: //EXIF = 7  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeScale(-1.0, 1.0);  
        transform = CGAffineTransformRotate(transform, M_PI / 2.0);  
        break;  

    case UIImageOrientationRight: //EXIF = 8  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);  
        transform = CGAffineTransformRotate(transform, M_PI / 2.0);  
        break;  

    default:  
        [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];  

}  

UIGraphicsBeginImageContext(bounds.size);  

CGContextRef context = UIGraphicsGetCurrentContext();  

if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {  
    CGContextScaleCTM(context, -scaleRatio, scaleRatio);  
    CGContextTranslateCTM(context, -height, 0);  
}  
else {  
    CGContextScaleCTM(context, scaleRatio, -scaleRatio);  
    CGContextTranslateCTM(context, 0, -height);  
}  

CGContextConcatCTM(context, transform);  

CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);  
UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext();  

return imageCopy;

Suggest me the Solution.

A: 

You've asked 18 questions on Stack Overflow and never accepted any of the answers. It doesn't really inspire anyone to help you. Participate in the community in the way the SO creators intended it and you'll likely get the answers you need.

Matt Long
While I agree with the sentiment, this should really be a comment, *not* an answer.
Sixten Otto
Seems a little strange to vote someone down when you "agree with the sentiment." Yer a real sweetheart.
Matt Long
Having just chosen to visit this question based on the potential promise of the answer, I think Sixteen's right. The appropriate response isn't to get snippy, but rather to add a Comment with your original response and then delete your Answer.
clozach