在.net中,如何简单快捷地实现Photoshop滤镜组中的邮戳效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也能够在文末下载所有源码:数组
第一步:在引用了SharpImage.dll以后,调用SharpImage方法以前,必定要先经过下面代码来设置受权信息,若是是试用版,直接输入Test便可。post
KeyMgr.SetKey("Test");
从以前的一篇博文中,咱们介绍了一张图看懂SharpImage,从那篇文章咱们能够看出,SharpImage经过ImageEngine来做为图像处理的基石,全部效果都是做为ImageEngine的Effects来进行的,Effects将被应用到ImageEngine的各类Element上,产生变幻无穷的效果。请看下面的代码:测试
//实例化ImageEngine engine = new ImageEngine();
对ImageEngine进行一些自定义设置,具体可参考API手册。代码以下:spa
//对一些基础属性进行设置 engine.Canvas.AutoSize = true; engine.Canvas.CenterElements = true; engine.Canvas.Width = 320;//此处通常设置为图片的宽便可 engine.Canvas.Height = 213;//此处通常设置为图片的高便可 engine.Canvas.Fill.Type = FillType.Solid;//采用纯色填充画布 engine.Canvas.Fill.BackgroundColor = Color.White;//画布为白色的
将待处理的图片加载到内存,SharpImage支持多种方式加载:从图片URL, 本地路径,Bitmap对象, 字节数组, Base64字符串,可任选其一。这里演示下三种方式的代码:.net
#region 加载测试图片的GDI+对象 bmpDemoImage = Properties.Resources.demo; #endregion #region 加载测试图片的字节流 using (MemoryStream ms = new MemoryStream()) { bmpDemoImage.Save(ms, bmpDemoImage.RawFormat); arrDemoImage = ms.ToArray(); } #endregion #region 加载测试图片的Base64字符串 strBase64DemoImage = Convert.ToBase64String(arrDemoImage); #endregion
在SharpImage中,图片被抽象为ImageElement,咱们将待处理图片,绑定到ImageElement上。代码以下:code
//创建一个ImageElement imageEle = new ImageElement(); //接下来,根据具体的图片数据源类型来为ImageElement提供数据,这里演示是用一个ComboBox来手动选择的 switch (cmbBox11.SelectedIndex) { case 0: //图片URL imageEle.SourceType = ImageSource.File; imageEle.SourceFile = "http://www.zzsgzn.com/images/demo.jpg"; break; case 1://本地路径 imageEle.SourceType = ImageSource.File; imageEle.SourceFile = "c:\\demo.jpg"; break; case 2://GDI+对象 imageEle.SourceType = ImageSource.Image; imageEle.SourceImage = bmpDemoImage; break; case 3://字节数组 imageEle.SourceType = ImageSource.Binary; imageEle.SourceBinary = arrDemoImage; break; case 4://base64字符串 imageEle.SourceType = ImageSource.Base64String; imageEle.SourceBase64 = strBase64DemoImage; break; }
将ImageElment对象和ImageEngine绑定在一块儿, 只须要执行下面的代码便可:orm
//将该ImageElement绑定到图像引擎对象上 engine.Elements.Add(imageEle);
此时,必定要注意:engine.Elements能够包含不少的element,最终的效果,将是这些元素的叠加。这个原理和Photoshop的图层叠加是一个原理。视频
哈吼!准备工做就绪啦!下面应用滤镜,邮戳效果滤镜是MailStampEffect,实例化并应用到ImageEngine便可,代码以下:对象
//初始化滤镜,并添加到ImageEngine的效果滤镜组中 MailStampEffect effect = new MailStampEffect(); //此处,您也能够对该滤镜的具体参数进行调整,具体参考API手册 ... engine.Effects.Add(effect);
应用完以后,就能够获取处理结果啦!blog
Image bmpResult = engine.GetOutputImage();
您能够须要了解如何获取摄像头帧图片,或者桌面屏幕图片,请了解SharpCapture:
SharpCapture,桌面屏幕,摄像头,音视频采集类库
您能够须要了解对摄像头亮度对比度色调曝光等几十种参数进行调整,请了解SharpCamera:
SharpCamera,专业的摄像头高级参数深控类库