2016-10-04 4 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

Как вы можете видеть в коде (прокомментировано), я пытаюсь связать нас контекстом.DrawImage, но без успеха. Затем я пытаюсь использовать originalImage.Draw, но опять пустое изображение. – Leze

+0

Не могли бы вы прояснить проблему, которая у вас есть? Код, который вы поделили, очень хорошо меняет изображение, я проверил его с помощью своего тестового приложения. Я также предлагаю использовать 'UIGraphics.BeginImageContext (rotatedSize)' внутри 'using()'. –

ответ

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();