C# 图片处理方法:按比例缩放与生成缩略图
“C#图片处理函数,用于对图片进行缩放等操作。” 在C#编程中,处理图像是一项常见的任务,特别是在开发图形用户界面(GUI)应用或网站时。这里介绍的代码片段提供了两个关键的函数,分别用于计算图片的新尺寸以适应指定的最大宽高,以及生成缩略图。下面是对这两个函数的详细解释: 首先,`GetNewSize` 函数是用来计算原图按比例缩放后的新尺寸,以确保新尺寸不超过给定的最大宽度和最大高度。该函数接收四个参数:`maxWidth`(最大宽度),`maxHeight`(最大高度),`imageOriginalWidth`(原始图片的宽度),和 `imageOriginalHeight`(原始图片的高度)。它通过以下步骤来确定新尺寸: 1. 将输入的整数宽高转换为双精度浮点数,以便进行比例计算。 2. 检查原始图片的宽高是否都小于最大宽高,如果是,则返回原始尺寸。 3. 计算原始图片的宽高比和最大宽高的宽高比。 4. 如果原始图片的宽高比大于最大宽高比,表示图片更宽,因此按照高度缩放,保持比例不变。 5. 否则,如果原始图片的宽高比小于最大宽高比,表示图片更高,因此按照宽度缩放。 6. 最后,将计算出的新宽度和高度转换回整数并返回。 接下来,`GetThumbNailImage` 函数用于创建原图的缩略图。它接收三个参数:`originalImage`(原始图片对象),`thumMaxWidth`(缩略图最大宽度),和 `thumMaxHeight`(缩略图最大高度)。这个函数使用 `GetNewSize` 函数计算缩略图的新尺寸,然后根据新尺寸创建一个缩略图。以下是生成缩略图的一般步骤: 1. 调用 `GetNewSize` 函数,获取缩略图的正确尺寸。 2. 使用 `System.Drawing.Image` 类的 `Clone` 方法创建原始图片的一个副本,避免修改原始图片。 3. 创建一个 `Bitmap` 对象,指定缩略图的新尺寸。 4. 创建一个 `Graphics` 对象,它代表一个画布,可以在这个画布上绘制图像。 5. 使用 `Graphics` 对象的 `DrawImage` 方法,将原始图片副本绘制到新创建的 Bitmap 上,指定缩放后的尺寸。 6. 最后,返回新的 Bitmap 图像对象作为缩略图。 这两个函数结合使用,能够灵活地处理图片,满足各种尺寸需求,如适应不同屏幕分辨率的显示,或者创建网页或应用中的预览图片。它们是C#中处理图像的基础工具,开发者可以根据实际需求进一步扩展这些功能,例如添加裁剪、旋转、色彩调整等操作。
/// 获取一个图片按等比例缩小后的大小。
/// </summary>
/// <param name="maxWidth">需要缩小到的宽度</param>
/// <param name="maxHeight">需要缩小到的高度</param>
/// <param name="imageOriginalWidth">图片的原始宽度</param>
/// <param name="imageOriginalHeight">图片的原始高度</param>
/// <returns>返回图片按等比例缩小后的实际大小</returns>
public static Size GetNewSize(int maxWidth, int maxHeight, int imageOriginalWidth, int imageOriginalHeight)
{
double w = 0.0;
double h = 0.0;
double sw = Convert.ToDouble(imageOriginalWidth);
double sh = Convert.ToDouble(imageOriginalHeight);
double mw = Convert.ToDouble(maxWidth);
double mh = Convert.ToDouble(maxHeight);
if (sw < mw && sh < mh)
{
w = sw;
h = sh;
}
else if ((sw / sh) > (mw / mh))
{
w = maxWidth;
h = (w * sh) / sw;
}
else
{
h = maxHeight;
}
return new Size(Convert.ToInt32(w), Convert.ToInt32(h));
}
/// <summary>
/// 对给定的一个图片(Image对象)生成一个指定大小的缩略图。
/// </summary>
/// <param name="originalImage">原始图片</param>
/// <param name="thumMaxWidth">缩略图的宽度</param>
/// <param name="thumMaxHeight">缩略图的高度</param>
/// <returns>返回缩略图的Image对象</returns>
public static System.Drawing.Image GetThumbNailImage(System.Drawing.Image originalImage, int thumMaxWidth, int thumMaxHeight)
{
Size thumRealSize = Size.Empty;
System.Drawing.Image newImage = originalImage;
Graphics graphics = null;
try
{
thumRealSize = GetNewSize(thumMaxWidth, thumMaxHeight, originalImage.Width, originalImage.Height);
newImage = new Bitmap(thumRealSize.Width, thumRealSize.Height);
graphics = Graphics.FromImage(newImage);
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.Clear(Color.Transparent);
剩余8页未读,继续阅读
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 深入理解23种设计模式
- 制作与调试:声控开关电路详解
- 腾讯2008年软件开发笔试题解析
- WebService开发指南:从入门到精通
- 栈数据结构实现的密码设置算法
- 提升逻辑与英语能力:揭秘IBM笔试核心词汇及题型
- SOPC技术探索:理论与实践
- 计算图中节点介数中心性的函数
- 电子元器件详解:电阻、电容、电感与传感器
- MIT经典:统计自然语言处理基础
- CMD命令大全详解与实用指南
- 数据结构复习重点:逻辑结构与存储结构
- ACM算法必读书籍推荐:权威指南与实战解析
- Ubuntu命令行与终端:从Shell到rxvt-unicode
- 深入理解VC_MFC编程:窗口、类、消息处理与绘图
- AT89S52单片机实现的温湿度智能检测与控制系统