C#图片按比例缩放的实现代码


下面是一个使用C#实现的图片按比例缩放的简单示例。这个示例使用了`System.Drawing`命名空间中的类来加载和保存图像,并调整其大小。请注意,由于`System.Drawing`主要用于Windows窗体应用程序,如果你在其他类型的项目中(如.NET Core或.NET 5/6+的控制台应用程序)使用它,可能需要安装额外的NuGet包(如`System.Drawing.Common`)。


using System;
using System.Drawing; // 需要引用System.Drawing.Common包

public class ImageResizer
{
    public static Bitmap ResizeImage(Image image, int width, int height)
    {
        var destRect = new Rectangle(0, 0, width, height);
        var destImage = new Bitmap(width, height);

        destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

        using (var graphics = Graphics.FromImage(destImage))
        {
            graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
            graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;

            using (var wrapMode = new ImageAttributes())
            {
                wrapMode.SetWrapMode(System.Drawing.Drawing2D.WrapMode.TileFlipXY);
                graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
            }
        }

        return destImage;
    }

    // 示例用法
    public static void Main()
    {
        try
        {
            // 假设有一个图片文件路径
            string imagePath = "path_to_your_image.jpg";

            // 加载图片
            using (Image originalImage = Image.FromFile(imagePath))
            {
                // 假设我们想要将图片缩放到宽度为200px,高度按比例缩放
                int newWidth = 200;
                // 计算新的高度,保持宽高比
                int newHeight = (int)(originalImage.Height * ((float)newWidth / originalImage.Width));

                // 调用ResizeImage方法
                Bitmap resizedImage = ResizeImage(originalImage, newWidth, newHeight);

                // 保存或显示resizedImage...
                // 注意:这里只是展示了如何调用方法,并没有实际保存或显示图片
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("发生错误: " + ex.Message);
        }
    }
}

请注意,这个示例假设你已经有了图片的路径,并且想要将其缩放到一个新的尺寸,同时保持图像的宽高比。`ResizeImage`方法接受一个`Image`对象、新的宽度和高度作为参数,并返回一个新的`Bitmap`对象,该对象包含了缩放后的图像。

在实际应用中,你可能需要处理各种异常情况,比如文件不存在、图片格式不支持等,这里只是简单地捕获了异常并打印了错误消息。此外,如果你正在使用.NET Core或.NET 5/6+的控制台应用程序,请确保已经安装了`System.Drawing.Common` NuGet包。