2016-10-04 17 views
0

画像を回転して保存すると画像が保存されるときに動作しますが、画像を回転しようとすると回転は行われますが画像は空白になります。ここでXamarin UIImage rotation

public UIImage RotateImage (UIImage originalImage, int rotationAngle) 
     { 
      UIImage rotatedImage = originalImage; 

      if (rotationAngle > 0) { 
       CGSize rotatedSize; 
       float angle = Convert.ToSingle ((Math.PI/180) * rotationAngle); 

       using (UIView rotatedViewBox = new UIView (new CGRect (0, 0, originalImage.Size.Width, originalImage.Size.Height))) { 
        CGAffineTransform t = CGAffineTransform.MakeRotation (angle); 
        rotatedViewBox.Transform = t; 
        rotatedSize = rotatedViewBox.Frame.Size; 

        UIGraphics.BeginImageContext (rotatedSize); 
        CGContext context = UIGraphics.GetCurrentContext(); 

        context.TranslateCTM (rotatedSize.Width/2, rotatedSize.Height/2); 
        context.RotateCTM (angle); 
        context.ScaleCTM ((nfloat)1.0, -(nfloat)1.0); 

        context.DrawImage (new CGRect (-originalImage.Size.Width/2, -originalImage.Size.Height/2, originalImage.Size.Width, originalImage.Size.Height), originalImage.CGImage); 

        rotatedImage = UIGraphics.GetImageFromCurrentImageContext(); 

        UIGraphics.EndImageContext(); 
       } 

      } 

      return rotatedImage; 
     } 

は私が得るものです:

Rotated image

とオリジナル画像:

original image

更新:小さなコード変更

+0

画像と作成されたコンテキストとの間に関係が定義されていないため、画像は空白だと思います。 – NeverHopeless

+0

あなたがコード(コメント)で見ることができるように、私はcontext.DrawImageによって私たちをリンクしようとしますが、成功しません。それから、私はoriginalImageで試してみましょう。 – Leze

+0

あなたはあなたが持っている問題を明確にすることは親切でしょうか?共有したコードはイメージを回転させるだけで、テストアプリケーションでチェックしました。 'using()'の中で 'UIGraphics.BeginImageContext(rotatedSize)'を使うことを提案します。 –

答えて

0

rotate image using CGContextDrawImage

 CGImage imgRef = originalImage.CGImage; 
     float width = imgRef.Width; 
     float height = imgRef.Height; 
     CGAffineTransform transform = CGAffineTransform.MakeIdentity(); 
     RectangleF bounds = new RectangleF(0, 0, width, height); 

     float angle = Convert.ToSingle((rotationAngle/180f) * Math.PI); 
     transform = CGAffineTransform.MakeRotation(angle); 

     UIGraphics.BeginImageContext(bounds.Size); 

     CGContext context = UIGraphics.GetCurrentContext(); 

     context.TranslateCTM(width/2, height/2); 
     context.SaveState(); 
     context.ConcatCTM(transform); 
     context.SaveState(); 
     context.ConcatCTM(CGAffineTransform.MakeScale(1.0f, -1.0f)); 

     context.DrawImage(new RectangleF(-width/2, -height/2, width, height), imgRef); 
     context.RestoreState(); 

     UIImage imageCopy = UIGraphics.GetImageFromCurrentImageContext(); 
     UIGraphics.EndImageContext();