iOS图像使用Monotouch(Xamarin),旋转图像

时间:2013-12-17 20:53:35

标签: ios image

我已经看了很长一段时间,这没有任何意义。我有两个可能的图像A.png是28x28,A @ 2x.png是56x56。

我加载图像并绘制它是完美的 - 正常和视网膜屏幕在同一空间绘制图像,视网膜的分辨率更高。

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 个答案:

答案 0 :(得分:1)

我想通了,画的画面是28x28,居中。替换绘图代码可以使图像更好。

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

Ret = UIGraphics.GetImageFromCurrentImageContext ();        

src.Draw行是已更改的行。