C#实现缩放和剪裁图片的方法示例
作者:songkexin 时间:2023-06-03 11:09:31
本文实例讲述了C#实现缩放和剪裁图片的方法。分享给大家供大家参考,具体如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace Project
{
class ImageOperation
{
/// <summary>
/// Resize图片
/// </summary>
/// <param name="bmp">原始Bitmap </param>
/// <param name="newW">新的宽度</param>
/// <param name="newH">新的高度</param>
/// <param name="Mode">保留着,暂时未用</param>
/// <returns>处理以后的图片</returns>
public static Bitmap ResizeImage(Bitmap bmp, int newW, int newH, int Mode)
{
try
{
Bitmap b = new Bitmap(newW, newH);
Graphics g = Graphics.FromImage(b);
// 插值算法的质量
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
g.Dispose();
return b;
}
catch
{
return null;
}
}
/// <summary>
/// 剪裁 -- 用GDI+
/// </summary>
/// <param name="b">原始Bitmap</param>
/// <param name="StartX">开始坐标X</param>
/// <param name="StartY">开始坐标Y</param>
/// <param name="iWidth">宽度</param>
/// <param name="iHeight">高度</param>
/// <returns>剪裁后的Bitmap</returns>
public static Bitmap Cut(Bitmap b, int StartX, int StartY, int iWidth, int iHeight)
{
if (b == null)
{
return null;
}
int w = b.Width;
int h = b.Height;
if (StartX >= w || StartY >= h)
{
return null;
}
if (StartX + iWidth > w)
{
iWidth = w - StartX;
}
if (StartY + iHeight > h)
{
iHeight = h - StartY;
}
try
{
Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(bmpOut);
g.DrawImage(b, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(StartX, StartY, iWidth, iHeight), GraphicsUnit.Pixel);
g.Dispose();
return bmpOut;
}
catch
{
return null;
}
}
}
}
目标其实都是new Rectangle(0, 0, iWidth, iHeight)
,缩放算法把整个原始图都往目标区域里塞new Rectangle(0, 0, bmp.Width, bmp.Height)
,而剪裁只是把原始区域上等宽等高的那个区域new Rectangle(StartX, StartY, iWidth, iHeight)1:1的塞到目标区域里。
希望本文所述对大家C#程序设计有所帮助。
标签:C#,缩放,剪裁,图片
0
投稿
猜你喜欢
Flutter图片与文件选择器使用实例
2023-07-17 09:11:12
C# 写入XML文档三种方法详细介绍
2021-11-08 23:20:08
浅谈SpringCloud实现简单的微服务架构
2023-05-22 12:59:34
Android获取app应用程序大小的方法
2023-09-18 15:02:18
Springboot与Maven多环境配置的解决方案
2023-11-29 08:53:58
Unity实现Flappy Bird游戏开发实战
2023-03-10 19:56:58
Java中两种基本的输入方式小结
2023-02-06 18:37:24
git版本回退_动力节点Java学院整理
2022-06-21 13:26:10
java对象序列化与反序列化的默认格式和json格式使用示例
2021-12-07 18:22:23
Java 动态代理的多种实现方式
2023-11-20 05:23:14
Spring的组合注解和元注解原理与用法详解
2023-12-05 10:25:05
java实现用户自动登录
2023-11-10 14:38:59
java实现秒表功能
2023-07-06 05:55:13
单独编译Android 源代码中的模块实现方法
2021-08-20 07:00:46
AccessibilityService实现微信发红包功能
2023-06-23 03:51:53
JAVA实现长连接(含心跳检测Demo)
2023-08-05 09:51:13
java实现快速排序图文详解
2022-10-11 16:35:18
实例讲解Java的Spring框架中的控制反转和依赖注入
2023-04-24 17:44:49
详解mybatis generator代码生成器的使用
2021-08-28 09:05:42
Java+Selenium实现文件上传下载功能详解
2021-06-23 23:33:23