在.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的图层叠加是一个原理。

应用滤镜

哈吼!准备工作就绪啦!下面应用滤镜,过度曝光滤镜是SolarizeEffect,实例化并应用到ImageEngine即可,代码如下:

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

获取处理结果

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

Image bmpResult = engine.GetOutputImage();

运行效果图

demo源码下载

点击下载源码

相关推荐

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

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

C# vb .net实现过度曝光效果滤镜的更多相关文章

  1. C# vb .net实现锐化效果滤镜

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

  2. C# vb .net实现像素化效果滤镜打马赛克

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

  3. C# vb .net实现透视图效果滤镜

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

  4. C# vb .net实现倾斜效果滤镜

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

  5. C# vb .net实现胶片效果滤镜

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

  6. C# vb .net实现宝丽来效果滤镜

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

  7. C# vb .net实现邮戳效果滤镜

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

  8. C# vb .net实现拉伸效果滤镜

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

  9. C# vb .net实现淡色效果滤镜

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

随机推荐

  1. DT包 -- R语言中自定义表格数据

    DT 包提供了 JavaScript 库 DataTables 的一个R接口,它使得R对象(矩阵或数据框)可以在HTML页面上显示为表格. 该包的DataTables函数生成的表格提供了数据的筛选.分 ...

  2. js -ajax 学习

    2.ajax 1)跨域 $.ajax({        type : "get",        data : "data_xName=" + data_xNa ...

  3. js中for..of..的使用和迭代器

    for..of是ES6中引入的新特性,它主要的作用是:循环一个可迭代的对象. 它可以循环遍历,数组.字符串.Set对象等等,先来看两个简单的例子: 遍历字符串 let str = 'Hello' fo ...

  4. [linux]查看进程占用内存

    1.top -p 进程ID PID:进程的ID USER:进程所有者 PR:进程的优先级别,越小越优先被执行 NInice:值 VIRT:进程占用的虚拟内存 RES:进程占用的物理内存 SHR:进程使 ...

  5. 移除 WordPress 自动加载的 jQuery,使用自定义 jQuery 版本

    WordPress 使用的 jQuery 版本由于需要考虑到很多安全稳定的因素,所以一般不会使用最新版本的 jQuery, 可以通过以下方式移除 WordPress 自定加载的 jQuery,并加载自 ...

  6. kotlin基础 尾递归

    尾调用的重要性在于它可以不在调用栈上面添加一个新的堆栈帧——而是更新它,如同迭代一般. 尾递归因而具有两个特征: 调用自身函数(Self-called): 计算仅占用常量栈空间(Stack Space ...

  7. aardio类的例子

    论坛里面相关资料太少,这里贴一下 库需要在工程的lib目录下,在ide里面就是用户库目录,比如 my_lib namespace my_lib{ import console class MyLibC ...

  8. Python logging模块日志存储位置踩坑

    问题描述 项目过程中写了一个小模块,设计到了日志存储的问题,结果发现了个小问题. 代码结构如下: db.py run.py 其中db.py是操作数据库抽象出来的一个类,run.py是业务逻辑代码.两个 ...

  9. shell基础知识之数组

    数组允许脚本利用索引将数据集合保存为独立的条目.Bash支持普通数组和关联数组,前者 使用整数作为数组索引,后者使用字符串作为数组索引.当数据以数字顺序组织的时候,应该使 用普通数组,例如一组连续的迭 ...

  10. Flink Table Api & SQL 翻译目录

    Flink 官网 Table Api & SQL  相关文档的翻译终于完成,这里整理一个安装官网目录顺序一样的目录 [翻译]Flink Table Api & SQL —— Overv ...