下面是一个使用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包。