I'm trying to resize an image loaded from disk - a JPG or PNG (I don't know the format when I load it) - and then save it back to disk.
I've got the following code which I've tried to port from objective-c, however I've got stuck on the last parts. Original Objective-C.
This may not be the best way of achieving what I want to do - any solution is fine for me.
int width = 100;
int height = 100;
using (UIImage image = UIImage.FromFile(filePath))
{
    CGImage cgimage = image.CGImage;
    CGImageAlphaInfo alphaInfo = cgimage.AlphaInfo;
    if (alphaInfo == CGImageAlphaInfo.None)
        alphaInfo = CGImageAlphaInfo.NoneSkipLast;
    CGBitmapContext context = new CGBitmapContext(IntPtr.Zero,
        width,
        height,
  开发者_运维百科      cgimage.BitsPerComponent,
        4 * width,
        cgimage.ColorSpace,
        alphaInfo);
    context.DrawImage(new RectangleF(0, 0, width, height), cgimage);
    /*
    Not sure how to convert this part:
    CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
    UIImage*    result = [UIImage imageWithCGImage:ref];
    CGContextRelease(bitmap);   // ok if NULL
    CGImageRelease(ref);
    */
}
In the upcoming MonoTouch we will have a scale method, this is its implementation in 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;         
    }
Adjusted to be reused outside of 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;
    }
To get an UIImage from context all you need to do is:
UIImage* result = UIImage.FromImage(context.ToImage());
 
         
                                         
                                         
                                         
                                        ![Interactive visualization of a graph in python [closed]](https://www.devze.com/res/2023/04-10/09/92d32fe8c0d22fb96bd6f6e8b7d1f457.gif) 
                                         
                                         
                                         
                                         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论