在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用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的图层叠加是一个原理。

创建另外一个ImageElement

哈吼!准备工作就绪啦!下面实例化要叠加的图片元素,如果有多个,就实例化多个:

//生成一个参与合成的Element的子类,这里为ImageElement
ImageElement ele = new ImageElement();
imageEle.SourceType = ImageSource.File;
imageEle.SourceFile = "logo.jpg";//将该Element添加到图像引擎中,SharpImage将完成合成
engine.Elements.Add(ele);

获取处理结果

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

Image bmpResult = engine.GetOutputImage();

运行效果图

demo源码下载

点击下载源码

相关推荐

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

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

C# vb .net图像合成-多图片叠加合成相关推荐

  1. 二、VB.NET实现给图片添加文字水印

    VB.NET实现给图片添加文字水印 通过vb.net给选定的图片添加文字水印,添加的文字从文本文档中获取,可以一次给相同的图片添加不同的文字水印,并以添加的文字命名图片: Imports System ...

  2. vb添加GIF动态图片

    众说周知,GIF格式动画文件具有小巧.制作方便等特点,因此在网上得到广泛应用,在vb的picturebox和image控件添加图片后变成静止的了,这给我们设计VB应用程序带来了不便.原来以为实现起来特 ...

  3. vb 6 MDI窗体图片自适应源码

    vb 6.0制作的图片可以自适应的MDI窗体,最终完成的效果如截图所示,像不像一个比较专业的信息管理系统的界面效果?不过本实例主要是演示MDI窗体的制作方法,图片如何跟随窗口大小的变化而自动变化,打开 ...

  4. 使用VB.net将PNG图片转成icon类型图标文件

    有的时候,需要用到icon图标型图片,但一般网站上不好找到适合自己的icon型图片,所以,如果能将适合的图片直接转换成icon格式,那么会方便很多. 使用vb.net,可以自己编写一个转换的小程序,这 ...

  5. vb中怎么使图片适应框的大小_怎么让放进的图片随框大小而变

    当前位置:我的异常网» VB » 怎么让放进的图片随框大小而变 怎么让放进的图片随框大小而变 www.myexceptions.net  网友分享于:2013-01-30  浏览:6次 如何让放进的图 ...

  6. vb不能插入png图片_第16节-图片 | 剑雨Axure RP9系列「基础」

    图片 前面的话:图片这个元件可能是原型设计中使用频率最高的一个了.在AXURE中支持的图片格式有 JPG,PNG,GIF,BMP和SVG. 图片的添加 图片的添加有多种方法,如下: 从元件库中拖入 这 ...

  7. vb中怎么使图片适应框的大小_叮!VB考前练习了解一下?

    1.Visual Basic窗体设计器的主要功能是(C  ). A)  画图 B)  编写源程序代码 C)  建立用户界面 D)  显示文字 解析:Visual Basic窗体设计器简称窗体(Form ...

  8. vb不能插入png图片_收藏备用!!VBA操作图片【插入导出删除】

    作者学习VBA以来搜集的操作图片的代码都在这里了.这就是我说的用到时候修修改改的源代码. ▶▶▶单元格(合并单元格)插入图片 Pictures.insert通用性不如shapes.addpicture ...

  9. vb不能插入png图片_VB6.0载入PNG格式图片

    展开全部 给你一个示例吧,显示PNG到e69da5e6ba903231313335323631343130323136353331333335313739FORM上,用GDI的:Private Dec ...

最新文章

  1. CV边缘检测索贝尔算子
  2. 多角度人脸识别简单介绍
  3. UOJ.311.[UNR#2]积劳成疾(DP)
  4. 删库跑路大神的一生:曾在家造炸弹被捕,现卖房押宝NFT,原是开源创业之星...
  5. CString 在_UNICODE宏定义下和普通ASCII编码下的不同
  6. Python判断 子集
  7. java this$0_java中this$0的含义及用法
  8. iOS微博项目(七)发微博和定位
  9. 【IDEA】IDEA中使用git将项目上传到码云上
  10. 机器学习精讲(向量逼近+函数逼近)学习笔记——第五章
  11. mongodb之使用explain和hint性能分析和优化
  12. 基于STC8的WS2812b全彩灯实现
  13. OGG/OGV文件格式解析
  14. 网站自动回复客服源码
  15. 11年瑞纳手动挡值多少钱_10年瑞纳值多少钱(10年的手动高配瑞纳,跑了4万公里,现在值多少钱?)...
  16. uni-app知识点整理
  17. 远程桌面连接不上,三种方法教你重启服务器
  18. android 充电动画_酷玩儿丨去掉耳机和充电器,以后数据线苹果也不会送了
  19. 【MySQL数据库隔离级别】
  20. Android中添加CallStack打印

热门文章

  1. 才二十来岁,你就挺着个大肚子?
  2. 微信红包封面,2021年为啥突然火了?
  3. 评测 至强 W9-3475X参数 W93475X功耗
  4. 【转】数学专业的数学与计算机专业的数学的比较
  5. 小学生正确使用计算机,如何培养小学生的计算机操作技能
  6. Linux命令,未完待续。。。
  7. nlp翻译模型可以使用到通用人工智能
  8. CorelDRAW X7 17.1.0.572 (64位)
  9. Https与TCP协议的三次握手、四次挥手
  10. JAVA实现简单的登录界面