1

可能重复:
在 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;
     }

提前致谢。

4

2 回答 2

0

you can create a copy of the original image changing the orientation like this:

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

you has to put the second line in every of your conditions and change the orientation parameter to the correct value for each case, check the doc for more info

于 2012-12-11T09:22:25.887 回答
0

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

IE:

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

不幸的是,您需要查看使用内边框对旋转图像进行抗锯齿处理。之前已经在这里回答过了。

希望这可以帮助!

于 2012-12-11T09:25:41.660 回答