zoukankan      html  css  js  c++  java
  • C# vb .net图像合成-多图片叠加合成

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

    创建另外一个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();
    

    运行效果图

    [外链图片转存失败(img-DsjPo162-1569392864478)(http://blog.zzsgzn.com/posts/46316/1.jpg)]

    demo源码下载

    点击下载源码

    相关推荐

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

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

  • 相关阅读:
    CSS中position小解
    position
    mac默认安装postgresql, 如何让postgresql可以远程访问
    The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.0.
    active admin gem error
    psql 无法添加超级用户
    ubuntu 15.04 安装Balsamiq Mockups 3
    Rails html 写public里图片的路径
    rails c 历史命令
    undefined local variable or method `per' for []:ActiveRecord::Relation
  • 原文地址:https://www.cnblogs.com/rollsroyce/p/11680372.html
Copyright © 2011-2022 走看看