有帮助吗?

解决方案

在即将到来的MonoTouch我们将有一个尺度方法,这是其在UIImage.cs实现:

    public UIImage Scale (SizeF newSize)
    {
        UIGraphics.BeginImageContext (newSize);
        var context = UIGraphics.GetCurrentContext ();
        context.TranslateCTM (0, newSize.Height);
        context.ScaleCTM (1f, -1f);

        context.DrawImage (new RectangleF (0, 0, newSize.Width, newSize.Height), CGImage);

        var scaledImage = UIGraphics.GetImageFromCurrentImageContext();
        UIGraphics.EndImageContext();

        return scaledImage;         
    }

调整以外的MonoTouch的被重复使用:

    public static UIImage Scale (UIImage source, SizeF newSize)
    {
        UIGraphics.BeginImageContext (newSize);
        var context = UIGraphics.GetCurrentContext ();
        context.TranslateCTM (0, newSize.Height);
        context.ScaleCTM (1f, -1f);

        context.DrawImage (new RectangleF (0, 0, newSize.Width, newSize.Height), source.CGImage);

        var scaledImage = UIGraphics.GetImageFromCurrentImageContext();
        UIGraphics.EndImageContext();

        return scaledImage;         
    }

其他提示

    public static UIImage EditPhoto(int iMode, UIImage origImg)
    {
        SizeF newSize;

        if (iMode == 1 || iMode == 2)
            newSize = new SizeF(origImg.Size.Height, origImg.Size.Width);
        else
            newSize = origImg.Size;

        UIGraphics.BeginImageContext(newSize);
        CGContext ctx = UIGraphics.GetCurrentContext();

        switch (iMode)
        {
            case 1:         // Rotate counter-clockwise 90 degrees
                ctx.TranslateCTM(origImg.Size.Height, origImg.Size.Width);
                ctx.ScaleCTM(1f, -1f);
                ctx.RotateCTM(1.57079633f);     // angle is in radians
                break;

            case 2:         // Rotate clockwise 90 degrees
                ctx.ScaleCTM(1f, -1f);
                ctx.RotateCTM(-1.57079633f);     // angle is in radians
                break;

            case 3:         // Flip vertical
                // Do nothing. The image comes out flipped vertically because Core Graphics / OpenTK uses cartesian coordinates
                break;

            case 4:         // Flip horizontal
                ctx.TranslateCTM(newSize.Width, newSize.Height);
                ctx.ScaleCTM(-1f, -1f);
                break;

            default:        // Return unchanged image
                ctx.TranslateCTM(0, origImg.Size.Height);
                ctx.ScaleCTM(1f, -1f);
                break;
        }

        ctx.DrawImage(new RectangleF(0, 0, origImg.Size.Width, origImg.Size.Height), origImg.CGImage);
        UIImage resImg = UIGraphics.GetImageFromCurrentImageContext();

        UIGraphics.EndImageContext();
        return resImg;
    }

要充分利用上下文中的UIImage所有你需要做的是:

UIImage* result = UIImage.FromImage(context.ToImage());
scroll top