2013-12-17 67 views
1

我一直在尋找這個相當長的一段時間,這沒有任何意義。我有兩個可能的圖像A.png是28x28,而[email protected]是56x56。使用Monotouch(Xamarin)的iOS圖像,旋轉圖像

我加載圖像,並繪製它,它是完美的 - 普通和視網膜屏幕都在相同的空間繪製圖像,視網膜是更好的分辨率。

Image對象具有以下屬性:

Image.Size.Width = 28  or 56 for @2x image. 
Image.Width = 28 
Image.CurrentScale = 1.0 or 2.0 for @2x image. 

一切都很好。

現在,我想旋轉圖像。我通過下面的函數運行它,並且它帶有一個具有與上面完全相同的屬性的圖像 - 在.width和.height中具有28x28的旋轉圖像,以及image.size.width中的28或56。並與currentScale設置。

但是,它會在視網膜屏幕上畫出原始圖像的一半大小!我已經通過評論此方法的調用來證實情況是這樣,並且它會增大2倍。

這段代碼有什麼問題???

public static UIImage RotateImage (UIImage src, float angle) 
    { 
     UIImage Ret, Tmp; 
     float newSide = Math.Max (src.CGImage.Width, src.CGImage.Height);// * src.CurrentScale; 
     SizeF size = new SizeF (newSide, newSide); 

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

     context.TranslateCTM (newSide/2, newSide/2); 

     context.RotateCTM (angle); 
     src.Draw (new PointF (-src.Size.Width/2, -src.Size.Height/2)); 
     Ret = UIGraphics.GetImageFromCurrentImageContext();   

     UIGraphics.EndImageContext(); // Restore context 

     if (src.CurrentScale != 1.0f) 
      { 
      Tmp = new UIImage (Ret.CGImage, src.CurrentScale, UIImageOrientation.Up); 
      Ret.Dispose(); 
      return (Tmp); 
      } 

     return Ret; 
    } 

回答

1

我想通了,繪圖繪製的是28x28,居中。替換繪圖代碼使圖像更好。

context.RotateCTM (angle); 
src.Draw(new RectangleF (-src.CGImage.Width/2, -src.CGImage.Height/2, newSide, newSide)); 

Ret = UIGraphics.GetImageFromCurrentImageContext();   

src.Draw行是被更改的行。