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

次のように向きを変更して、元の画像のコピーを作成できます。

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

すべての条件に 2 行目を追加し、向きパラメータを各ケースの正しい値に変更する必要があります。詳細については、ドキュメントを確認してください。

于 2012-12-11T09:22:25.887 に答える
0

ビュー レベルで回転すると、ビットマップの忠実度が保持されます (つまり、それに触れません)。

すなわち:

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

残念ながら、回転した画像を内側の境界線でアンチエイリアス処理する必要があります。それはすでにここで以前に答えられています。

お役に立てれば!

于 2012-12-11T09:25:41.660 に答える