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

应用滤镜

哈吼!准备工作就绪啦!下面应用滤镜,消除红眼滤镜是RedEyeRemovalEffect,实例化并应用到ImageEngine即可,代码如下:

//初始化滤镜,并添加到ImageEngine的效果滤镜组中,此处演示消除左眼的红眼RedEyeRemovalEffect effect = new RedEyeRemovalEffect();
RedEyeArea[] arr = new RedEyeArea[1];
arr[0] = new RedEyeArea();
arr[0].X = 110;
arr[0].Y = 218;
arr[0].Width = 56;
arr[0].Height = 56;
effect.RedEyeAreas = arr;//此处,您也可以对该滤镜的具体参数进行调整,具体参考API手册
...engine.Effects.Add(effect);

获取处理结果

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

Image bmpResult = engine.GetOutputImage();

运行效果图

demo源码下载

点击下载源码

相关推荐

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

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

C# vb .net实现消除红眼效果相关推荐

  1. premiere消除红眼_如何修复红眼-使用Photoshop CC从图片中消除红眼

    premiere消除红眼 It's simple to remove red eyes from photos using Photoshop. This tutorial will show you ...

  2. CSDN开发者周刊第 20 期:Google 下一代操作系统 Fuchsia 源码正式公开;AI 消除马赛克 效果惊人

    CSDN开发者周刊:只为传递"有趣/有用"的开发者内容,点击 Star(CodeChina)! 本周热门项目 1.红帽停止维护 CentOS 8,创始人另起炉灶 12 月 8 日, ...

  3. Adobe Photoshop 2022 最牛图像编辑软件PS2022

    Adobe Photoshop 2022 for Mac Elements 是一款面向用户的多功能 macOS 图像编辑应用程序,可让您处理.组织.编辑和共享照片和视频,自动为照片着色,轻松消除干扰, ...

  4. 消除红眼效应及matlab实现

    红眼效应:是指用闪光灯拍摄人物照片时,在人眼瞳孔中央形成的红眼现象,有碍观瞻. * * 消除红眼思路:建立红眼模型->提取红眼区域->进行红眼修正->图像输出. 具体实现过程: 1. ...

  5. learn opencv-使用OpenCV的自动红眼删除

    参考:https://github.com/spmallick/learnopencv 使用OpenCV的自动红眼删除(C ++ / Python) 在本教程中,我们将学习如何完全自动地从照片中删除红 ...

  6. matlab去除红眼代码及详细介绍

    本篇博客借鉴了:https://blog.csdn.net/qq_35608277/article/details/78363139 但是他的代码还有一些地方没有说明清楚,并且使用之后效果不是很好.所 ...

  7. 如何使用OpenCV的去除自动红眼

    在本教程中,我们将学习如何完全自动消除照片中的红眼. 仅仅考虑消除红眼的问题,就会带回我小时候的记忆.小时候拥有一台傻瓜相机" Hotshot".它可能是我们家庭中唯一的便携式电子 ...

  8. [OpenCV实战]29 使用OpenCV实现红眼自动去除

    目录 1 红眼消除 1.1 眼部检测 1.2 红眼遮掩 1.3 清除瞳孔掩模空洞 1.4 红眼修复 2 结果与完整代码 2.1 结果 2.2 代码 3 参考 在本教程中,我们将学习如何完全自动地从照片 ...

  9. 摄影中如何拍摄眼睛及避免红眼

    人像拍摄靓眼法 眼睛是心灵的窗户,人像拍摄中非常重视对眼睛的处理,但是很多玩家在拍摄人像的时候,常常遇到拍摄对象眨眼,或者由于闪光灯使用不当造成红眼现象,而这是造成很多人像拍摄失败的一个重要因素.当然 ...

最新文章

  1. 预编译 ASP.NET 网站以进行部署
  2. 4702: 分糖果系列一
  3. 七牛2018春季校园招聘后端开发工程师笔试经验
  4. 独家揭秘!阿里大规模数据中心的性能分析 1
  5. 读《白帽子讲Web安全》之安全意识篇(一)
  6. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第一题:填算式
  7. BOM(Browser Object Model)
  8. 杭电acm 1846 Brave Game(巴什博弈)
  9. 如何查看linux下的环境变量
  10. http协议中的响应代码从 1xx ~ 5xx,一共有41种
  11. Java学习系列(十二)Java面向对象之序列化机制及版本
  12. python requests下载zip文件_python requests 下载zip包
  13. 华为网络篇 华为路由器的初始化配置-05
  14. 万娟 白话大数据和机械学习_白话大数据与机器学习
  15. 英语语法---读音规则
  16. ips细胞最新进展:利用iPS细胞成功培养出抑制宫颈癌繁殖的免疫杀伤T细胞,有望实现宫颈癌的免疫细胞疗法
  17. 【机器人学习】SCARA机器人正逆运动学分析与直线轨迹规划
  18. 育儿-《养育男孩》书中的精髓:父母如何理解男孩的每个成长阶段,更好地培养男孩?
  19. 干货:教你如何玩转信息流广告投放,整套信息流精准定向投放攻略!
  20. 三角形边长求高的c语言函数公式,c 求,已知三角形三边边长为abc,利用公式求面积...

热门文章

  1. 解决启动谷歌浏览器时打开2345主页
  2. [9i] 猪年说猪,属相,本命年,十二生肖用英语该怎么说
  3. JS——如何利用js实现流星雨效果?
  4. 在外包公司工作是什么样的体验?
  5. @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 和 @NotAudited
  6. [原创] PowerPC 汇编入门与优化
  7. 如何调用WxJump的API接口实现微信网址链接转二维码
  8. Clickhouse其它类型表引擎(Live View、Null、URL)
  9. 参加网络安全培训班学习,就业有哪些方向?
  10. 例如筋斗云的效果,但不通过offset定位的flag标记