C#图片辅助类,形成缩略图

完善一下别人的方法,成自己好用的工具

  1 using System.Drawing;
  2 using System.Drawing.Imaging;
  3 
  4 namespace GXNUQzzx.Tools.Utility
  5 {
  6     /// <summary>
  7     /// 图片缩放模式
  8     /// </summary>
  9     public enum ScaleMode
 10     {
 11         /// <summary>
 12         /// 指定高宽缩放(可能失真)
 13         /// </summary>
 14         Normal,
 15 
 16         /// <summary>
 17         /// 指定高,宽按比例
 18         /// </summary>
 19         Width,
 20 
 21         /// <summary>
 22         /// 指定宽,高按比例
 23         /// </summary>
 24         Height,
 25 
 26         /// <summary>
 27         /// 指定高宽裁减(不失真)
 28         /// </summary>
 29         Cut
 30     }
 31 
 32     /// <summary>
 33     /// 图片辅助类
 34     /// </summary>
 35     public static class ImageHelper
 36     {
 37         /// <summary>
 38         /// 生成缩略图
 39         /// </summary>
 40         /// <param name="originalImagePath">源图路径(物理路径)</param>
 41         /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
 42         /// <param name="width">缩略图宽度</param>
 43         /// <param name="height">缩略图高度</param>
 44         /// <param name="mode">生成缩略图的方式</param>    
 45         public static void GenerateThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ScaleMode mode)
 46         {
 47             using (Image originalImage = Image.FromFile(originalImagePath))
 48             {
 49                 GenerateThumbnail(originalImage, thumbnailPath, width, height, mode);
 50             }
 51         }
 52 
 53         /// <summary>
 54         /// 生成缩略图
 55         /// </summary>
 56         /// <param name="originalImage">源图</param>
 57         /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
 58         /// <param name="width">缩略图宽度</param>
 59         /// <param name="height">缩略图高度</param>
 60         /// <param name="mode">生成缩略图的方式</param>    
 61         public static void GenerateThumbnail(Image originalImage, string thumbnailPath, int width, int height, ScaleMode mode)
 62         {
 63             using (Image image = GenerateThumbnail(originalImage, width, height, mode))
 64             {
 65                 image.Save(thumbnailPath, ImageFormat.Jpeg);
 66             }
 67         }
 68 
 69         /// <summary>
 70         /// 生成缩略图
 71         /// </summary>
 72         /// <param name="originalImage">源图</param>
 73         /// <param name="width">缩略图宽度</param>
 74         /// <param name="height">缩略图高度</param>
 75         /// <param name="mode">生成缩略图的方式</param>    
 76         /// <returns>生成的缩略图</returns>
 77         public static Image GenerateThumbnail(Image originalImage, int width, int height, ScaleMode mode)
 78         {
 79             int towidth = width;
 80             int toheight = height;
 81 
 82             int x = 0;
 83             int y = 0;
 84             int ow = originalImage.Width;
 85             int oh = originalImage.Height;
 86 
 87             #region // 计算缩略图宽高
 88             switch (mode)
 89             {
 90                 default:
 91                 case ScaleMode.Normal: { break; }
 92                 case ScaleMode.Height:
 93                 {
 94                     toheight = originalImage.Height * width / originalImage.Width;
 95                     break;
 96                 }
 97                 case ScaleMode.Width:
 98                 {
 99                     towidth = originalImage.Width * height / originalImage.Height;
100                     break;
101                 }
102                 case ScaleMode.Cut:
103                 {
104                     if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
105                     {
106                         oh = originalImage.Height;
107                         ow = originalImage.Height * towidth / toheight;
108                         y = 0;
109                         x = (originalImage.Width - ow) / 2;
110                     }
111                     else
112                     {
113                         ow = originalImage.Width;
114                         oh = originalImage.Width * height / towidth;
115                         x = 0;
116                         y = (originalImage.Height - oh) / 2;
117                     }
118                     break;
119                 }
120             }
121             #endregion
122 
123             //新建一个bmp图片
124             Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
125 
126             //新建一个画板
127             using (Graphics g = System.Drawing.Graphics.FromImage(bitmap))
128             {
129                 //设置高质量插值法
130                 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
131 
132                 //设置高质量,低速度呈现平滑程度
133                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
134 
135                 //清空画布并以透明背景色填充
136                 g.Clear(Color.Transparent);
137 
138                 //在指定位置并且按指定大小绘制原图片的指定部分
139                 g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel);
140             }
141 
142             // 返回生成的缩略图
143             return bitmap;
144         }
145 
146         /// <summary>
147         /// 按原像素比例生成一张新图片
148         /// </summary>
149         /// <param name="oldImagePath">源图片路径(物理路径)</param>
150         /// <param name="newImagePath">新图片路径(物理路径)</param>
151         public static void GenerateNewImage(string oldImagePath, string newImagePath)
152         {
153             using (Image originalImage = Image.FromFile(oldImagePath))
154             {
155                 GenerateNewImage(originalImage, newImagePath);
156             }
157         }
158 
159         /// <summary>
160         /// 按原像素比例生成一张新图片
161         /// </summary>
162         /// <param name="oldImage">源图片</param>
163         /// <param name="newImagePath">新图片路径(物理路径)</param>
164         public static void GenerateNewImage(Image oldImage, string newImagePath)
165         {
166             using (Image image = GenerateNewImage(oldImage))
167             {
168                 image.Save(newImagePath, ImageFormat.Jpeg);
169             }
170         }
171 
172         /// <summary>
173         /// 按原像素比例生成一张新图片
174         /// </summary>
175         /// <param name="oldImage">源图片</param>
176         /// <returns>新图片</returns>
177         public static Image GenerateNewImage(Image oldImage)
178         {
179             int width = oldImage.Width;
180             int height = oldImage.Height;
181 
182             //新建一个bmp图片
183             Image bitmap = new System.Drawing.Bitmap(width, height);
184 
185             //新建一个画板
186             using (Graphics g = System.Drawing.Graphics.FromImage(bitmap))
187             {
188                 //设置高质量插值法
189                 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
190 
191                 //设置高质量,低速度呈现平滑程度
192                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
193 
194                 //清空画布并以透明背景色填充
195                 g.Clear(Color.Transparent);
196 
197                 //创建矩形
198                 var rectangle = new Rectangle(0, 0, width, height);
199 
200                 //在指定位置并且按指定大小绘制原图片的指定部分
201                 g.DrawImage(oldImage, rectangle, rectangle, GraphicsUnit.Pixel);
202             }
203 
204             // 返回新图片
205             return bitmap;
206         }
207     }
208 }

 

转载于:https://www.cnblogs.com/Jarvan-Chan/p/5599577.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
,发送别,概率,以及物体在相机坐标系下的xyz.zip目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的别。由于各物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分问题:判断图像中的目标属于哪个别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分 基于深度学习的目标检测算法主要分为两大: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的别。由于各物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分问题:判断图像中的目标属于哪个别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分 基于深度学习的目标检测算法主要分为两大: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的别。由于各物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分问题:判断图像中的目标属于哪个别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分 基于深度学习的目标检测算法主要分为两大: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值