C#图片裁剪与缩放
【参考】http://www.cnblogs.com/wu-jian/archive/2011/02/21/1959382.html
最近由于需要C#图片处理的相关应用,遂在网上参考一下,写出如下代码作为总结。
通常需要将图片缩放到指定宽度与高度的缩略图,若只对原图片进行缩放,当图片前后高宽比例不同时,缩放后的图片就会拉伸变形。可以采取的办法是先按照目标图片的高宽比进行裁剪,然后缩放到目标图片的高宽就ok了。
原理很简单:
1)首先根据目标图片的高宽比计算原图片的裁剪矩形区域
2)然后将该矩形区域内的图像拷贝到目标高宽的矩形区域中,下面上代码:
/// <summary>
/// 图片转换(裁剪并缩放)
/// </summary>
/// <param name="ASrcFileName">源文件名称</param>
/// <param name="ADestFileName">目标文件名称</param>
/// <param name="AWidth">转换后的宽度(像素)</param>
/// <param name="AHeight">转换后的高度(像素)</param>
/// <param name="AQuality">保存质量(取值在1-100之间)</param>
public static void DoConvert(string ASrcFileName, string ADestFileName, int AWidth, int AHeight, int AQuality)
{
Image ASrcImg = Image.FromFile(ASrcFileName);
if (ASrcImg.Width <= AWidth && ASrcImg.Height <= AHeight)
{//图片的高宽均小于目标高宽,直接保存
ASrcImg.Save(ADestFileName);
return;
}
double ADestRate = AWidth * 1.0 / AHeight;
double ASrcRate = ASrcImg.Width * 1.0 / ASrcImg.Height;
//裁剪后的宽度
double ACutWidth = ASrcRate > ADestRate ? (ASrcImg.Height * ADestRate) : ASrcImg.Width;
//裁剪后的高度
double ACutHeight = ASrcRate > ADestRate ? ASrcImg.Height : (ASrcImg.Width / ADestRate);
//待裁剪的矩形区域,根据原图片的中心进行裁剪
Rectangle AFromRect = new Rectangle(Convert.ToInt32((ASrcImg.Width - ACutWidth) / 2), Convert.ToInt32((ASrcImg.Height - ACutHeight) / 2), (int)ACutWidth, (int)ACutHeight);
//目标矩形区域
Rectangle AToRect = new Rectangle(0, 0, AWidth, AHeight);
Image ADestImg = new Bitmap(AWidth, AHeight);
Graphics ADestGraph = Graphics.FromImage(ADestImg);
ADestGraph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
ADestGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
ADestGraph.DrawImage(ASrcImg, AToRect, AFromRect, GraphicsUnit.Pixel);
//获取系统image/jpeg编码信息
ImageCodecInfo[] AInfos = ImageCodecInfo.GetImageEncoders();
ImageCodecInfo AInfo = null;
foreach (ImageCodecInfo i in AInfos)
{
if (i.MimeType == "image/jpeg")
{
AInfo = i;
break;
}
}
//设置转换后图片质量参数
EncoderParameters AParams = new EncoderParameters(1);
AParams.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)AQuality);
//保存
ADestImg.Save(ADestFileName, AInfo, AParams);
}
分享到:
相关推荐
本篇文章介绍了一种非常简洁的C#图片裁剪与缩放的方法。通过合理的计算和使用`System.Drawing`命名空间下的类库,可以轻松实现图片的按比例缩放和裁剪功能。这种方法适用于多种应用场景,如网页开发、移动应用等。...
图片裁剪是指从图片中选取一个矩形区域并保存为新的图片。同样使用Graphics类的DrawImage方法,但需要指定源图像的裁剪区域。例如: ```csharp using System.Drawing; Image original = Image.FromFile("image....
本文主要介绍了C#实现缩放和剪裁图片的方法,结合实例形式分析了C#针对图片属性的缩放、裁剪等相关操作技巧。 图片缩放 图片缩放是指将原始图片按照一定的比例或尺寸进行缩放,以适应不同的显示需求。在C#中,可以...
这个工具集成了多种功能,包括图片裁剪、缩放、涂鸦、旋转以及查看和保存图片信息。我们将讨论每个功能的关键技术和实现方法。 首先,我们需要了解WPF的基本概念。WPF是.NET Framework的一部分,用于构建具有丰富...
本项目“用c#实现的图片裁剪并保存”聚焦于这一领域,通过扫描指定文件夹中的图片,对不符合尺寸要求的图片进行裁剪和缩放,并将处理后的图片覆盖原有的文件。以下是对这一技术实现的详细解析: 首先,我们需要引入...
本教程将详细讲解如何利用C#的Bitmap类创建一个图片裁剪器,允许用户自定义裁剪尺寸和生成缩略图。 首先,我们需要引入必要的命名空间,以便使用Bitmap类和其他相关组件: ```csharp using System.Drawing; using ...
本文将深入探讨如何使用C#进行图片的基本处理,包括裁剪、缩放、调整清晰度以及添加水印,这些都是在图像处理中常见的需求。 ### 一、裁剪图像 裁剪是图片处理中最基础的操作之一,主要用于去除图像边缘或特定区域...
本资源提供的就是一个实现了这一功能的用户控件,名为"C# winForm 图片裁剪代码",并且经过实际测试,其效果理想,界面设计与QQ截图的体验相似。 首先,我们需要理解WinForm用户控件(User Control)的概念。它是...
总之,C#图片剪裁涉及到图像处理和GUI编程技术,通过.NET Framework提供的工具,可以轻松地实现这一功能。对于更复杂的需求,如旋转、缩放或添加滤镜效果,可以进一步研究`System.Drawing`命名空间中的其他类和方法...
图片裁剪** 裁剪图片则是选取原始图片的一部分区域进行保留。同样使用`Bitmap`的`Clone()`方法,但需要指定源矩形和目标矩形: ```csharp Rectangle cropRect = new Rectangle(x, y, width, height); Bitmap ...
在这个特定的项目中,我们关注的是如何实现“像PS一样裁剪原图片”,即在C#环境中模仿Photoshop的裁剪功能,允许用户通过鼠标拖动来裁剪图片。这涉及到图像的选取、坐标计算、缩放以及纠偏、亮度和对比度调整等技术...
这个压缩包“图片处理、二维码识别生成工具c#支持图片裁剪、任意缩放 支持二维码识别和生成.zip”包含了一些核心的C#项目,用于实现图像处理和二维码操作的功能。 首先,我们来探讨C#中的图像处理。C#提供了丰富的...
本教程将聚焦于“C# 标记图片实现裁剪功能”,通过一个实际的demo来详细阐述如何进行图片裁剪。 首先,我们需要理解C#中的图像处理库,如System.Drawing命名空间。这个命名空间提供了许多类,如Image、Graphics和...
C# 图片工具类 上传 缩放 裁剪 水印 生成缩略图
这个组件的核心功能在于提供了一种方便的方式来缩放和裁剪图像,使得开发者无需深入理解图像处理的底层细节,就能在应用程序中实现灵活的图片操作。 首先,我们要理解什么是Winform。Winform是.NET Framework的一...
本文将深入探讨使用C#语言进行图片裁剪、缩放和转换格式的技术细节,以及这些功能的实现方式。 首先,C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台的软件开发,包括桌面应用和Web应用。对于...
2. 图片裁剪:裁剪是图像处理中的基本操作,用于删除图片的某些部分或选取特定区域。在C#中,可以使用System.Drawing命名空间下的类来实现,如Bitmap和Graphics。通过指定坐标和尺寸,我们可以创建一个新的图像区域...