0
public static class ImageHelper
{
    public static UIImage Scale (UIImage source, SizeF newSize)
    {
        UIGraphics.BeginImageContext (newSize);
        var context = UIGraphics.GetCurrentContext ();
        context.InterpolationQuality=CGInterpolationQuality.High;
        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 Rotate (UIImage image)
    {

        UIImage res;

        using (CGImage imageRef = image.CGImage) {
            CGImageAlphaInfo alphaInfo = imageRef.AlphaInfo;
            CGColorSpace colorSpaceInfo = CGColorSpace.CreateDeviceRGB ();
            if (alphaInfo == CGImageAlphaInfo.None) {
                alphaInfo = CGImageAlphaInfo.NoneSkipLast;
            }

            int width, height;

            width = imageRef.Width;
            height = imageRef.Height;
            int maxSize = Math.Max (width, height);

            if (height >= width) {
                width = (int)Math.Floor ((double)width * ((double)maxSize / (double)height));
                height = maxSize;
            } else {
                height = (int)Math.Floor ((double)height * ((double)maxSize / (double)width));
                width = maxSize;
            }


            CGBitmapContext bitmap;

            if (image.Orientation == UIImageOrientation.Up || image.Orientation == UIImageOrientation.Down) {
                bitmap = new CGBitmapContext (IntPtr.Zero, width, height, imageRef.BitsPerComponent, imageRef.BytesPerRow, colorSpaceInfo, alphaInfo);
            } else {
                bitmap = new CGBitmapContext (IntPtr.Zero, height, width, imageRef.BitsPerComponent, imageRef.BytesPerRow, colorSpaceInfo, alphaInfo);
            }

            switch (image.Orientation) {
                case UIImageOrientation.Left:
                bitmap.RotateCTM ((float)Math.PI / 2);
                bitmap.TranslateCTM (0, -height);
                break;
                case UIImageOrientation.Right:
                bitmap.RotateCTM (-((float)Math.PI / 2));
                bitmap.TranslateCTM (-width, 0);
                break;
                case UIImageOrientation.Up:
                break;
                case UIImageOrientation.Down:
                bitmap.TranslateCTM (width, height);
                bitmap.RotateCTM (-(float)Math.PI);
                break;
            }

            bitmap.DrawImage (new Rectangle (0, 0, width, height), imageRef);


            res = UIImage.FromImage (bitmap.ToImage ());
            bitmap = null;

        }


        return res;
    }
}

调用方法=> UIImage ScaledImage =ImageHelper.Scale (ImageHelper.Rotate (downloadedImage), new SizeF (270, 260));

请提供任何解决方案以保持质量,并将其扩展到所需的大小。

4

1 回答 1

3

Xamarin 的UIImage实现包含两个不同的 Scale() 方法

Scale(System.Drawing.SizeF) : UIImage
Scale(System.Drawing.SizeF, float) : UIImage
于 2013-09-03T00:43:56.873 回答