在iPhone中旋转图像时需要保持图像质量

时间:2012-12-11 08:52:06

标签: iphone objective-c ios image-rotation image-editing

  

可能重复:
  Need to retain original quality of image while rotating in iPhone sdk

在我的应用中,我可以将图像旋转90度。当我旋转很多次......它变得模糊(缺少像素清晰度)。我失去了img质量。任何人都可以建议实现这一目标。

这里我用一个按钮来旋转图像。用于轮换的代码是:

- (UIImage *)rotateImage:(UIImage *) img
{

     CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height);
     UIGraphicsBeginImageContext(rect.size);

     CGContextRef context = UIGraphicsGetCurrentContext();


     if (img.imageOrientation == UIImageOrientationRight) 
     {
          CGContextRotateCTM (context, M_PI_2);
     } 

     else if (img.imageOrientation == UIImageOrientationLeft) 
     {
          CGContextRotateCTM (context, -(M_PI_2));
     }

     else if (img.imageOrientation == UIImageOrientationDown) 
     {
          // NOTHING
     } 

     else if (img.imageOrientation == UIImageOrientationUp) 
     {
         CGContextRotateCTM (context, M_PI_2);
     }

     //CGContextRotateCTM(context, M_PI_2);

     CGContextTranslateCTM(context,0, -(img.size.width));
     [img drawInRect:CGRectMake(0, 0, img.size.height,img.size.width)];


     UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
     appDelegate.savedImage=newImage;

     UIGraphicsEndImageContext();
     CGContextRelease(context);
     return newImage;
     }

先谢谢。

2 个答案:

答案 0 :(得分:0)

您可以创建原始图像的副本,更改方向,如下所示:

CGImageRef imageRef = [img CGImage];
UIImage *rotatedImage = [UIImage imageWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationUp];

您必须在每个条件中放置第二行,并将orientation参数更改为每种情况的正确值,请查看doc以获取更多信息

答案 1 :(得分:0)

在视图级别旋转将保留位图保真度(即,它不会触摸它)。

即:

#define DEG2RAD(d) (M_PI * d / 180.0)
...
_imageView.transform = CGAffineTransformMakeRotation(DEG2RAD(45));

不幸的是,您需要查看带有内边框的旋转图像的抗锯齿。这已经在这里得到了解答。

希望这有帮助!