C# - 图片处理
Ki1381
业务范围:硬件维护、软件开发、项目管理、股票操盘、代客泊车、代收快递、电器维修、手机贴膜、保洁保安、帮厨传菜
展开
-
树莓派mono上跨平台运行一个C#自制的简易图片处理器
好奇mono到底能神奇到啥程度,决定在windows下开发一个C#小程序在树莓派上跑跑看。具体环境:Windows 10 LTSC版 + VS2017专业版,Framework 4.5.2,普通winform。具体开发过程不是本文重点,略过,反正算法N年前都贴过,重新捡起来组装下而已。树莓派:sudo apt-get install mono-complete这里有个小插曲,发现最近在...原创 2020-01-19 11:36:21 · 1760 阅读 · 7 评论 -
C#图片处理之:最简单的柔化算法
与锐化相反,柔化是使图片看起来更柔滑(其实也是模糊的委婉的说法)。柔化的一个最简单的实现算法就是取图片上的每一点(图片边缘点忽略),计算它周围八个点的平均值作为新像素值。想想也是,之所以看起来模糊,确实是因为周围的点长的有点像,区别不太明显。 // ============================柔化==============================原创 2007-05-10 20:35:00 · 6024 阅读 · 2 评论 -
c#图片处理之:在图片上打上文字
以前讨论过在一张图片上加上另一张图片,说难也不难,基本上只要知道利用GDI+提供的DrawImage函数就可以了。现在需要在图片上打上文字,其实也很简单。贴图用DrawImage,那么贴文字当然就是DrawString啦。 //============================设置文字============================== /**//原创 2007-05-11 06:57:00 · 3623 阅读 · 3 评论 -
C#图片处理之:在图片上画框(圈)
有时候给别人演示图片,例如培训某个软件使用的时候,往往需要在画面上画个框或者圈,提醒用户注意这是个重点。其实这个功能并不难,只需要知道Pen对象的用法就可以了。我们对框或者圈样式的控制都可以通过对Pen的控制来实现。 /**//// /// 在图片上画框 /// /// 原始图 /// 起始点 /原创 2007-08-13 13:16:00 · 16799 阅读 · 0 评论 -
C#图片处理之:在图片上画直线
在图片上画直线比画框更简单。线形的控制还是通过对Pen的设置来实现的。 /**//// /// 在图片上画线 /// /// 原始图 /// 起始点 /// 终止点 /// 线的颜色 /// 线宽 /// 线条样式 /// 输出图 p原创 2007-08-16 11:31:00 · 9147 阅读 · 0 评论 -
用C#读取数码相片的EXIF信息(一)
现在的数码相机拍摄出来的照片表面上看都是很普通的JPEG的图片,但通常还包含着诸如相片拍摄时使用的相机生产商、型号、光圈值、快门速度等各类附加信息,这就是所谓的Exif信息。Exif是一种图像文件格式,只是文件的后缀名还是沿用大家熟悉的jpg而已。掌握Exif信息对学习提高摄影技术很有帮助。C#.NET作为一种现代的全能开发语言,对EXIF也有着较好的支持。在.NET中,我们可以用Proper原创 2007-05-23 22:20:00 · 5573 阅读 · 0 评论 -
C#图片处理之: 获取数码相片的EXIF信息(二)
还是边看个实例边聊吧,我们会讨论一些常用的ExifPropertyTagID,并了解如何得到它们的值。请牢记,MSDN是很好的资源。随便打开张我拍的照片,按上次说的方法扫描每一个Exif属性项目。第一项的ID是0x010F。查MSDN,发现是“Null-terminated character string that specifies the manufacturer of the equi原创 2007-05-29 20:34:00 · 3689 阅读 · 9 评论 -
C#图片处理之:保存原始Exif到处理过的JPEG图片中
自从越来越多的兄弟姐妹买了单反,亮骚就是不可避免的了,处理过的图片丢失Exif信息未免有些遗憾。原创 2011-04-28 11:10:00 · 4479 阅读 · 0 评论 -
一种简洁的为图片设置Logo的算法,支持透明度选项
之前提到的算法是基于原理性的,代码比较繁琐。最近看到一个用色彩矩阵的例子,觉得很简洁,分享一下。原理就不多说了,因为线性代数什么的早就放弃了 :D /// /// 合并图片,支持透明度选项 /// /// 原始图 /// LOGO图 /// 透明度,取值[0,1],数值越大L原创 2012-06-23 08:20:31 · 1850 阅读 · 0 评论 -
C#图片处理之:图片缩放和剪裁
应听众点播要求,今天说说用C#做图片的缩放和剪裁,相信很多人会对这部分内容感兴趣,毕竟这个操作太实用了。其实在GDI+中,缩放和剪裁可以看作同一个操作,无非就是原始区域的选择不同罢了。空口无凭,先看具体算法可能更好理解。 /// /// Resize图片 /// /// 原始Bitmap /// 新的宽度原创 2007-04-25 19:40:00 · 19500 阅读 · 1 评论 -
C#图片处理之:色彩调整
上面有一篇提到了图片明暗的调整,其原理是每个象素的三个颜色分量同时增加或减少一个固定的值。现在更进一步,假如每个象素三个分量增加或减少的值不是相同的呢?嗯,这就今天要讨论的主题了。应该很容易想明白,假如我们需要一张照片偏红一点,那只需要每个象素的红色分量值都增加就可以了。举个更实际一点的场景,比如要把一张鲜艳的彩色照片处理成泛棕的老旧黑白照,最简单的一个方法就是先把它处理成256级灰阶图,然后原创 2007-04-25 18:58:00 · 8779 阅读 · 1 评论 -
C#图片处理之:旋转图片90度的整数倍
旋转图片90的整数倍那真是太简单了。 public static Bitmap KiRotate90(Bitmap img) ...{ try ...{ img.RotateFlip(RotateFlipType.Rotate90FlipNone);原创 2007-04-25 18:43:00 · 4015 阅读 · 0 评论 -
C#图片处理之:给你的图片打上LOGO
做图片处理软件,肯定会遇到这样的需求:如何把一张图片放在另一张图片上,比如在大图片中打上公司或个人的Logo等等。其实原理很简单。假设我们有一张 800 * 600 的大图片(Bitmap b0),想在(10,10)的位置上打上Logo(Bitmap b1),Logo图片大小是 150 * 30。很简单,我们以大图片的(10,10)位置作为起始位置,做一个150 * 30 的矩形,把Logo图原创 2006-09-23 13:39:00 · 3422 阅读 · 5 评论 -
C#图片处理之: 另存为压缩质量可自己控制的JPEG
处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件使用C#很方便的就可以把多种格式的图片文件读到Bitmap对象中。一句话就够了,常见的格式都支持,诸如JPEG,BMP,PNG等等。Bitmap bmp = new Bitmap("文件名");然后就是怎么处理这个图片的问题了,与本案无关,pass。原创 2007-02-13 12:49:00 · 10725 阅读 · 2 评论 -
使用C#的BitmapData
我在前两篇图片处理的文章里几乎都用BitmapData来做图片处理的,那么这个东东究竟是个什么玩意儿呢?C#好是好,但处理图片时一个像素一个像素的操作像素可不是一般的慢,尤其是数码相机拍摄的大图片。其实Delphi也一样,但好在Delphi的Bitmap类提供了ScanLines,可以一行一行的读图,效率比较高。C#应该也有类似的东东。经过一番搜索,终于发现了BitmapData原创 2007-01-10 01:30:00 · 10977 阅读 · 2 评论 -
C# 图片处理之:彩色图片转为黑白图
首先解释下所谓的黑白图片。其实更准确地应该叫256级灰度图。当一个颜色点的R=G=B时,就是我们所谓的“灰色”。由于RGB的取值范围在[0,255],所以一共只有256种可能。所以彩色图片转为黑白图片的原理非常简单。只要扫描彩图的每一点,让输出图对应点的R=G=B就成了。现在问题的关键就是如何取值了。一般有两种,一种是彩图RGB三分量的算数平均值,另一种是加权平均值。加权平均是考虑到人类眼原创 2007-03-04 20:50:00 · 13323 阅读 · 1 评论 -
C# 图片处理之:旋转图片任意角度
拍摄的数码相片偶尔也有拍歪的时候。没关系,我们还是可以用C#来处理图片。 /// /// 任意角度旋转 /// /// 原始图Bitmap /// 旋转角度 /// 背景色 /// 输出Bitmap public static Bitmap KiRotate(Bitmap bmp,原创 2007-01-28 00:35:00 · 28156 阅读 · 8 评论 -
C#图片处理之:Gamma校正
gamma值是用曲线表示的,这是一种人的眼睛对光的一种感应曲线,其中包括了物理量、身理感官及心理的感知度。 -- 摘自百度知道 用C#做Gamma校正的操作也很简单。 /**//// /// Gamma校正 /// /// 输入Bitmap /// [0 2] /// 输出Bitmap原创 2007-03-23 11:28:00 · 7335 阅读 · 1 评论 -
C#图片处理之:亮度和对比度的校正
亮度和对比度应该是最常见的处理要求了。就算是N年前9寸黑白电视机也必有这两个旋钮。亮度调整算法很简单。对每一个像素的RGB值同时加上或减去一个特定的值就可以了。当然由于RGB取值范围都是在[0,255]的,所以要考虑到越界的问题。 /**//// /// 图像明暗调整 /// /// 原始图 /// 亮度[-25原创 2007-03-24 10:05:00 · 14490 阅读 · 6 评论 -
C#图片处理之: 锐化
使用数码相机,难免会拍糊一些照片。 但如果只是轻微糊掉,不妨可以尝试先锐化再缩小的办法补救。锐化看起来很神奇,可以在一定程度内把不清晰的变清晰,这个和柔化正好相反。其实锐化的算法说穿了很简单:取每一点的周围八点和自己本身共九个点。计算周围八个点的平均值,把自己减去这个平均值得到一个差值。这个差值乘上一个系数(也就是锐化的程度),加上自己的原始值,得到一个新值。这个新值就是我们要的锐化以后的原创 2007-04-17 21:39:00 · 6742 阅读 · 0 评论 -
C#处理数码相片之马赛克的实现
应听众点播要求,今天讲讲马赛克算法的实现。老规矩,不求甚解,只许看不许问为什么很多图片处理的算法从原理上讲其实非常简单,难点往往在如何去写算法实现它,更加难的就是如何去优化实现的算法。虽说我一向认为程序员的效率比程序的效率更重要,但为了等处理一张自己拍摄的数码照片,溜出去买杯奶茶顺便再买张彩票回来发现还没算好,无论如何都是不能忍受的。马赛克算法很简单,说白了就是把一张图片分割成若干个val原创 2006-09-21 14:35:00 · 2798 阅读 · 0 评论