System.Drawing
命名空间中的 Graphics
类来实现图片按比例缩放。以下是一个简单的示例代码:“ csharp,using System;,using System.Drawing;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;, },},
` 这个函数接受一个
Image`对象和目标宽度、高度作为参数,并返回 按比例缩放后的新图像。
在C#中,实现图片按比例缩放是一项常见任务,可以通过多种方式来完成,以下是一些常用的方法:
使用System.Drawing
命名空间
1、加载原始图片
需要引入System.Drawing
命名空间,并使用Image.FromFile
方法加载要缩放的图片,如果要缩放一张名为example.jpg
的图片,可以使用以下代码:
“`csharp
using System.Drawing;
Image originalImage = Image.FromFile("example.jpg");
2、计算新的尺寸 根据所需的缩放比例或目标尺寸(保持长宽比),计算新的宽度和高度,假设要保持原始的长宽比,并且将宽度缩放到新宽度newWidth
,可以使用以下公式计算新的高度:
```csharp
int newHeight = (int)(originalImage.Height (double)newWidth / originalImage.Width);
3、创建缩放后的图片
使用new Bitmap
构造函数和Graphics.DrawImage
方法来创建缩放后的图片。
“`csharp
Bitmap resizedImage = new Bitmap(newWidth, newHeight);
using (Graphics g = Graphics.FromImage(resizedImage))
{
g.DrawImage(originalImage, 0, 0, newWidth, newHeight);
}
4、保存或显示缩放后的图片 可以将缩放后的图片保存到文件或显示在界面上,保存为新的文件: ```csharp resizedImage.Save("resized_example.jpg");
1、安装SkiaSharp包
通过NuGet包管理器安装SkiaSharp库,可以在项目中添加对高质量图像处理的支持。
2、加载和缩放图片
使用SkiaSharp提供的SKBitmap
和SKCanvas
类来加载和缩放图片。
“`csharp
using SkiaSharp;
SKBitmap originalBitmap = SKBitmap.Decode("example.jpg");
SKBitmap resizedBitmap = new SKBitmap((int)(originalBitmap.Width scale), (int)(originalBitmap.Height scale));
using (SKCanvas canvas = new SKCanvas(resizedBitmap))
{
canvas.Clear(SKColors.Transparent);
canvas.DrawBitmap(originalBitmap, new SKRect(0, 0, originalBitmap.Width, originalBitmap.Height), new SKRect(0, 0, resizedBitmap.Width, resizedBitmap.Height));
}
3、保存或显示缩放后的图片 类似于使用System.Drawing
,可以将缩放后的SKBitmap
保存为文件或用于其他目的。 示例代码整合 以下是一个完整的示例,展示了如何使用System.Drawing
命名空间按比例缩放图片:
using System;
using System.Drawing;
class Program
static void Main()
{
string inputPath = "example.jpg";
string outputPath = "resized_example.jpg";
double scale = 0.5; // 缩放比例
using (Image originalImage = Image.FromFile(inputPath))
{
int newWidth = (int)(originalImage.Width scale);
int newHeight = (int)(originalImage.Height scale);
Bitmap resizedImage = new Bitmap(newWidth, newHeight);
using (Graphics g = Graphics.FromImage(resizedImage))
{
g.DrawImage(originalImage, 0, 0, newWidth, newHeight);
}
resizedImage.Save(outputPath);
}
Console.WriteLine("图片已成功缩放并保存到:" + outputPath);
}
相关问答FAQs 1、问:如何确保缩放后的图片质量不受损?答:为了确保缩放后的图片质量,建议使用高质量的缩放算法,如双线性插值或双三次插值,在System.Drawing
中,可以通过设置Graphics
对象的InterpolationMode
属性来实现。
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
这将使用双三次插值算法进行缩放,从而提高图片质量。 2、问:如何处理不同格式的图片文件?答:无论图片是JPEG、PNG还是其他格式,上述方法都同样适用。System.Drawing.Image.FromFile
方法和SKBitmap.Decode
方法都能自动识别图片格式并进行解码,无需为不同格式编写不同的代码逻辑,只需确保在保存时指定正确的文件扩展名即可。