代码之家  ›  专栏  ›  技术社区  ›  Louis Sherwood

单点触控-纠正图像上下颠倒的旋转

  •  0
  • Louis Sherwood  · 技术社区  · 12 年前

    我使用mono已经有一段时间了,我遇到的一个问题是,将图像加载到CGImage对象中会导致图像垂直翻转。这是我最初使用的代码:

    public static CGImage LoadJPEG (string sImagePath, bool bSmoothImage)
    {
        return CGImage.FromJPEG (
            new CGDataProvider (sImagePath), null, bSmoothImage,
            CGColorRenderingIntent.Default);
    }
    

    有一个PNG版本,您只需使用CGImage.FromPNG即可,但如果您使用错误的格式和错误的文件类型,则会出现异常。由于我一直知道我的文件类型是什么,所以我没有进行任何捕获/检查来防止出现异常。

    你会注意到,仅仅使用这个代码就会垂直翻转图像,我无法解释为什么mono会这样做,看看我不期待修复的一些解决方案。

    那么如何将其翻转回来呢?好吧,幸运的是,我可以自己回答,但我不能保证这是“正确”的方法!

    1 回复  |  直到 12 年前
        1
  •  0
  •   Community CDub    7 年前

    请记住,这只是一个颠倒加载图像的快速修复方法。我认为在完成工作的同时,代码是尽可能简单的。

    public static CGImage RotateImage (CGImage oImage)
    {
        CGContext oContext;
        UIImage oRotatedImage;
        RectangleF oImageBounds;
        //
        oImageBounds = new RectangleF (0, 0, oImage.Width, oImage.Height);
        //
        UIGraphics.BeginImageContext (oImageBounds.Size);
        oContext = UIGraphics.GetCurrentContext ();
        //
        oContext.DrawImage (oImageBounds, oImage);
        oRotatedImage = UIGraphics.GetImageFromCurrentImageContext ();
        UIGraphics.EndImageContext ();
        //
        return oRotatedImage.CGImage;
    }
    

    我在玩中的代码时偶然发现了这个解决方案 this question 然后想,嘿,这很有效,我不需要它来做任何其他事情:D所以我希望这能帮助你!

    此外,如果有人能解释这一切的原因,那么请,我很想知道到底发生了什么。我以前唯一使用2D图形的经验是使用XNA框架。