在.net中,如何简单快捷地实现Photoshop滤镜组中的黑白效果效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库。下面开始演示关键代码,您也可以在文末下载全部源码:

设置授权

第一步:在引用了SharpImage.dll之后,调用SharpImage方法之前,一定要先通过下面代码来设置授权信息,如果是试用版,直接输入Test即可。

KeyMgr.SetKey("Test");

初始化一个ImageEngine

从之前的一篇博文中,我们介绍了一张图看懂SharpImage,从那篇文章我们可以看出,SharpImage通过ImageEngine来作为图像处理的基石,所有效果都是作为ImageEngine的Effects来进行的,Effects将被应用到ImageEngine的各种Element上,产生千变万化的效果。请看下面的代码:

//实例化ImageEngine
engine = new ImageEngine();

设置ImageEngine的基础参数

对ImageEngine进行一些自定义设置,具体可参考API手册。代码如下:

//对一些基础属性进行设置
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字符串,可任选其一。这里演示下三种方式的代码:

#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

初始化ImageElement

在SharpImage中,图片被抽象为ImageElement,我们将待处理图片,绑定到ImageElement上。代码如下:

//建立一个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;
}

绑定ImageElement和ImageEngine

将ImageElment对象和ImageEngine绑定在一起, 只需要执行下面的代码即可:

//将该ImageElement绑定到图像引擎对象上
engine.Elements.Add(imageEle);

此时,一定要注意:engine.Elements可以包含很多的element,最终的效果,将是这些元素的叠加。这个原理和Photoshop的图层叠加是一个原理。

应用滤镜

哈吼!准备工作就绪啦!下面应用滤镜,黑白效果滤镜是ConvertToBlackWhiteEffect,实例化并应用到ImageEngine即可,代码如下:

//初始化滤镜,并添加到ImageEngine的效果滤镜组中
ConvertToBlackWhiteEffect effect = new ConvertToBlackWhiteEffect(); //此处,您也可以对该滤镜的具体参数进行调整,具体参考API手册
... engine.Effects.Add(effect);

获取处理结果

应用完之后,就可以获取处理结果啦!

Image bmpResult = engine.GetOutputImage();

运行效果图

demo源码下载

点击下载源码

相关推荐

您可以需要了解如何获取摄像头帧图片,或者桌面屏幕图片,请了解SharpCapture:
SharpCapture,桌面屏幕,摄像头,音视频采集类库

您可以需要了解对摄像头亮度对比度色调曝光等几十种参数进行调整,请了解SharpCamera:
SharpCamera,专业的摄像头高级参数深控类库

最新文章

  1. 通过WebStorm上传代码至github
  2. SQL Server 2008在Windows 10上不支持
  3. nodejs支持ssi实现include shtml页面
  4. 【转】Java-----jar反编译修改重新打包
  5. linux freetds操作mssql
  6. Memcached 笔记与总结(5)Memcached 的普通哈希分布和一致性哈希分布
  7. 慕课网-安卓工程师初养成-2-2 认识Java标识符
  8. Leetcode#61 Rotate List
  9. 1515 跳 - Wikioi
  10. DataTable操作(建表,建行,建列,添加数据)
  11. 学习CSS一些事(下)
  12. Citrix 服务器虚拟化之十三 Xenserver虚拟机内存优化与性能监控
  13. SearchScore
  14. Float与二进制之间的转化(Java实现)
  15. LeetCode 696 Count Binary Substrings 解题报告
  16. TestNG详解(单元测试框架)
  17. Html5计算MD5值
  18. 双倍浮向(双倍边距)(只有IE6出现)
  19. 4G通信模块在ARM平台下的应用
  20. 重写( override)and 重载(overload)

热门文章

  1. seqtk 一款快速处理fasta/fastq 文件的小程序
  2. 如何新建WebAPI,生成注释,TestAPI的项目
  3. javascript的Map使用
  4. 对回溯算法的理解(以数独游戏为例,使用c++实现)
  5. yum -y install pip No package pip available. Error: Nothing to do
  6. 用PMML实现python机器学习模型的跨平台上线
  7. sessionid 特性
  8. jetty源码下载
  9. SQL存储实现将JSON自动转化成SQL数据列
  10. Mark about 《美国债务危机 》