c#图片缩放图片剪切功能实现(等比缩放)


在C#中,要实现图片的等比缩放以及剪切功能,你可以使用System.Drawing命名空间下的类,如`Bitmap`、`Graphics`等。以下是一个示例代码,展示了如何等比缩放一张图片,并在缩放后根据需求进行剪切。

首先,请确保你的项目中引用了System.Drawing.Common库(对于.NET Core或.NET 5/6/7等较新版本的.NET平台)。


using System;
using System.Drawing;
using System.Drawing.Imaging;

public class ImageResizerAndCropper
{
    public static Bitmap ResizeAndCropImage(Image image, int maxWidth, int maxHeight)
    {
        // 计算缩放比例
        decimal ratioX = (decimal)maxWidth / image.Width;
        decimal ratioY = (decimal)maxHeight / image.Height;
        decimal ratio = Math.Min(ratioX, ratioY);

        // 计算缩放后的尺寸
        int newWidth = (int)(image.Width * ratio);
        int newHeight = (int)(image.Height * ratio);

        // 创建一个新的Bitmap用于存储缩放后的图片
        Bitmap bmp = new Bitmap(newWidth, newHeight);

        // 使用Graphics对象绘制缩放后的图片
        using (Graphics gfx = Graphics.FromImage(bmp))
        {
            gfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            gfx.DrawImage(image, 0, 0, newWidth, newHeight);
        }

        // 如果需要剪切,可以根据需要进行
        // 这里假设我们想要剪切出图片的中心部分,使其完全适应maxWidth和maxHeight
        int cropX = (newWidth - maxWidth) / 2;
        int cropY = (newHeight - maxHeight) / 2;
        Rectangle cropRect = new Rectangle(cropX, cropY, maxWidth, maxHeight);

        // 使用Bitmap的Clone方法剪切图片
        Bitmap result = bmp.Clone(cropRect, bmp.PixelFormat);

        // 释放原始缩放图片的资源
        bmp.Dispose();

        return result;
    }

    // 示例用法
    public static void Main()
    {
        // 加载图片
        Image originalImage = Image.FromFile("path_to_your_image.jpg");

        // 调用ResizeAndCropImage方法,这里假设我们需要将图片缩放并剪切到200x200的大小
        Bitmap resizedAndCroppedImage = ResizeAndCropImage(originalImage, 200, 200);

        // 保存或显示处理后的图片
        // resizedAndCroppedImage.Save("path_to_save_resized_and_cropped_image.jpg", ImageFormat.Jpeg);

        // 释放原始图片资源
        originalImage.Dispose();

        // 注意:这里未实现显示或保存resizedAndCroppedImage的代码,因为这是一个命令行示例
        // 在实际应用中,你可能需要将其保存为文件或在GUI中显示
    }
}

请注意,示例中的`path_to_your_image.jpg`和`path_to_save_resized_and_cropped_image.jpg`需要替换为你自己的文件路径。

此代码段首先计算了图片的缩放比例,并等比缩放图片。然后,它计算了为了将缩放后的图片裁剪到指定大小(`maxWidth`和`maxHeight`)所需的裁剪区域,并进行了裁剪。最后,它返回了裁剪后的图片。注意,在实际应用中,你可能需要添加错误处理逻辑来处理文件读取/写入错误、图片格式不支持等情况。