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

创建一个TextElement

哈吼!准备工作就绪啦!下面实例化一个文字元素:

//生成一个参与合成的Element的子类,这里为TextElement
TextElement ele = new TextElement("我爱中国!", new SharpImage.Font("宋体", 22, FontUnit.Point), Color.Red, Color.Black, 1); //将该Element添加到图像引擎中,SharpImage将完成合成
engine.Elements.Add(ele);

获取处理结果

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

Image bmpResult = engine.GetOutputImage();

运行效果图

demo源码下载

点击下载源码

相关推荐

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

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

最新文章

  1. java web图片上传和文件上传
  2. FastJson--阿里巴巴公司开源的速度最快的Json和对象转换工具(转)
  3. 利用"NOTIFYICONDATA"实现MFC的托盘程序
  4. 百度Clouda的初步探索
  5. Luci - UCI (Unified Configuration Interface)
  6. 【转】Android折叠效果实现案例
  7. poj-3898 Software Industry Revolution DP
  8. Microsoft.Identity的IPasswordHasher的默认实现与运用
  9. SQLyog-12.4.2版下载,SQLyog最新版下载,SQLyog官网下载,SQLyog Download
  10. HBase多条件及分页查询的一些方法
  11. python批量处理文件夹中文件的问题
  12. 学习笔记之The Intelligent Investor, Rev. Ed
  13. ubuntu 安装python mysqldb
  14. python的初始化运行了哪些?
  15. Docker常见问题
  16. Wpf 导出CSV文件
  17. springcloud-06-feign的使用
  18. docker的本地仓库换成阿里云的镜像仓库
  19. (转)Ubuntu 12.04 LTS安装VMware Tools实现linux和window 互相复制:无法找到kernel header path的问题
  20. (转)【Android】获取Mac地址【2】

热门文章

  1. java并发编程(三)cpu cache & 缓存一致性
  2. linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】
  3. win10-mysql卸载干净
  4. SoapUI: 设置case的属性变量
  5. SpringCloud Gateway跨域配置
  6. jetty demo实例启动
  7. Supervisor进程守护工具的使用
  8. shell 备份mysql
  9. 阿里云Maven仓库地址setting配置
  10. Starting Jenkins bash: /usr/bin/java: 没有那个文件或目录