我已经看了很长一段时间,这没有任何意义。我有两个可能的图像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;
}
答案 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行是已更改的行。