很久之前,就想写一系列C#图像编程的文章,但始终没有下笔,其主要原因有二:(1)我的C#图像处理库 Geb.Image 库在大幅度变动中;(2)没有找到一个很好的演示工具。现在,对于第一个问题,Geb.Image库的基本结构已经确定了;对于第二个问题,选择了LinqPad作为C#图像编程和演示工具,轻巧简便。就从现在开始吧。

(1) 准备实验环境

假设您熟悉C#编程,且电脑中有 32 位的.Net 4.0 环境。在此基础上,我们开始搭建C# 图像编程的实验环境。

第一步:下载安装 LinqPad。

LinqPad 是一款小巧易用的C#代码段编译工具,有免费版与收费版,收费版比免费版多了自动完成功能。如果不需要自动完成功能,用免费版即可。

第二步:下载Geb.Image类库

Geb.Image 是我的C#图像处理基本库,地址:https://github.com/xiaotie/GebImage

其目录结构如上图。这里,我们只使用其中的dll目录和scripts目录。顾名思义,dll 就是一些基本的 dll,scripts 就是本系列文章所写的 C# 脚本。

第三步:设置 LinqPad

打开 LinqPad ,按 【F4】快捷键,进入 Query Properties 设置界面,在“Additional References”选项卡中,将dll目录中的dll加入进去。

然后,在“Additional Namespace Imports”里加入Geb.Image,Geb.Utils和Geb.Utils.WinForm 三个命名空间,点击“Set as Default for new queries” 保存:

这样,我们就添加了必要的 dll 引用,添加了常用的命名空间。

接着,点击LinqPad左下侧的“Set Folder ... ”链接,将 scripts 目录设置为工作目录:

工作目录中显示的每一个文件便是一个C#脚本文件。双击可加载文件。

(2) 第一个脚本:你好,空姐

在工作目录中,双击“1-1-显示图片”,可看到:

该脚本的作用是加载显示图像。在运行之前,需要将 baseDir 目录更改为 scripts/img 目录的实际路径。点击绿色三角形按钮,一副熟悉的面孔出现了:

(3)像素操作演示——为照片增加夜光特效

下面,我们以空姐的照片为测试照片,来实现夜光特效算法:

夜光特效实现起来非常简单:将图像中的每个像素的Red值修改为当前值的1/2即可。程序文件为scripts\001\1-2-夜光特效.linq,这里通过四种方法来实现这一功能,来演示像素操作:

String baseDir = "E:\\MyWorkspace\\DotNetWorkspace\\01_Public_Geb.Image\\scripts\\img\\";unsafe void Main()
{ImageRgb24 img = new ImageRgb24(baseDir + "cjk.jpg");img.ShowDialog("img");// 将图像看作连续的内存,通过偏移量来访问ImageRgb24 img2 = img.Clone();for(int i = 0; i < img2.Length; i++){Rgb24 p= img2[i];p.Red = (Byte)(p.Red/2);img2[i] = p;}img2.ShowDialog("img2");// 将图像看作一个二维“表格”,通过行和列坐标来访问ImageRgb24 img3 = img.Clone();for(int row = 0; row < img3.Height; row++){for(int col = 0; col < img3.Width; col ++){Rgb24 p= img3[row,col];p.Red = (Byte)(p.Red/2);img3[row,col] = p;}}img3.ShowDialog("img3");// 直接通过指针访问ImageRgb24 img4 = img.Clone();{Rgb24* p = img4.Start;Rgb24* pEnd = p + img4.Length;while(p != pEnd){p->Red = (Byte)(p->Red/2);p++;}}img4.ShowDialog("img4");// 通过lambda表达式访问ImageRgb24 img5 = img.Clone();img5.ForEach((Rgb24* p)=>{p->Red = (Byte)(p->Red/2);});img5.ShowDialog("img5");// Dispose 可以释放图像所占非管理内存。如果不Dispose,当GC销毁对象时,也会释放非管理内存。// img.Dispose();// img2.Dispose();// img3.Dispose();// img4.Dispose();// img5.Dispose();
}

是不是很简单呢?下面是娱乐时间。

(4)小插曲

为什么用空姐作为演示图片呢?让我们从刀妹说起吧。

在《英雄联盟》游戏中有个外号“刀锋意志”的英雄——艾瑞莉娅,俗称刀妹。刀妹是一个暴力妹纸——“那把剑狂乱飞舞,仿佛蘸血为画”。

由于过于暴力,刀妹屡次被削弱,有说被连续削弱12次,有说22次。以至于“某某太强了我们来削弱一下刀妹吧!”成了网络流行语了:盖伦太强了,我们来削弱一下刀妹吧;卡牌太强了,我们来削弱一下刀妹吧;今天天气不错 我们来削弱一下刀妹吧 。。。

在图像处理界,也有一个无所不在的妹纸,Lena:

Lena 是 1972年的一期花花公子封面女郎,自从1973年,某同学将这张照片用在论文中后,这张图片成了最常用的测试图片了,几乎在每本图像处理书中都可以看到她。

在地球上各个角落里,这样的声音此起彼伏,历经四十年而不衰:

程序写完了,我们用Lena来测试下吧;

算法优化了,我们用Lena来测试下吧;

……

在东方,空姐比Lena更具有亲和力,俺就不以Lena为测试图片了,代之以空姐。

程序写完了,我们用空姐来测试下吧;

算法优化了,我们用空姐来测试下吧;

……

C# 图像编程 (1) 准备工作; 你好,空姐; 为空姐照片添加特效相关推荐

  1. Python可以这样学(第七季:pillow扩展库图像编程)-董付国-专题视频课程

    Python可以这样学(第七季:pillow扩展库图像编程)-1738人已学习 课程介绍         董付国老师系列教材<Python程序设计(第2版)>(ISBN:978730243 ...

  2. 计算机数控编程特点,什么是数控图像编程系统有哪些特点

    第五章 图像数控编程 一. 图像编程简介 二. 二坐标平面轮廓数 控加工图像编程 三. 多坐标图像数控编程 四. 高速切削加工简介 图像编程即根据计算 机图形显示器上显示的 零件设计三维模型,在1. ...

  3. Python编程基础——编程环境准备工作

    Python编程基础--编程环境准备工作 Anaconda的安装与使用 介绍 下载与安装(本文仅以Win10为例) Pip的基本使用与镜像源设置 介绍 Pip镜像源设置(本文仅以Win10为例) Pi ...

  4. 图形图像编程实践 课程报告

    文章目录 图形图像编程实践 课程报告 实验环境 EX01 图像的二值化 问题描述 算法设计 结果分析 原图 灰度图 二值化结果图 EX02 图像的加减 问题描述 算法设计 结果分析 原图 灰度图 图片 ...

  5. WINDOWS图像编程

    图形设备接口(GDI,Graphics Device Interface)的主要目标之一是支持在输出设备(如视频显示器.打印机和绘图仪)上的与设备无关的图形. GDI通过将应用程序与不同输出设备特性相 ...

  6. 如何自学图像编程(转)

    现在,图像类信息越来越多了,对图像的编程需求也越来越多.图像类项目的特点是性价比高,单行代码的价格一般是普通的程序的10倍,每行代码能够卖几块钱.很多人把目光放在这个上面.刚才又有网友咨询,做图像要看 ...

  7. GCC编译器与OpenCV图像编程

    GCC编译器与OpenCV图像编程 一.可执行程序的组装过程 (一)用 gcc 生成 .a 静态库和 .so 动态库 1.编辑得到举例的程序:hello.h.hello.c和main.c 2.将hel ...

  8. 一个C#函数学完C#图形图像编程基础

    老师说C#主要用于 1.winform开发 2.网络 3.驱动 在图形图像处理上用的比较少,不过书里有图形图像编程这一章节,为了系统的学完C#编程基础,以及为了能够更熟悉C#的特性,再加上今天晚上闲的 ...

  9. TC图像编程-汉字串显示【原创】

    TC图像编程-汉字串显示[原创] 2008/03/09 14:36 /*我把这代码贴出来是学习之用,所以一些说明我也就懒得讲了*/ /********************************* ...

最新文章

  1. MM的SQLDMO- -哈哈(数据备份与恢复篇)
  2. 4G最快网速相当于30M宽带
  3. 机器学习算法基础——决策树和随机深林
  4. JavaScript——使用正则表达式提取指定格式内容
  5. 【JUC】CountDownLatch
  6. Android对Bitmap的内存优化
  7. Windows平台下搭建Git服务器
  8. 【原创】大叔案例分享(4)定位分析--见证scala的强大
  9. Hadoop的详细配置(持续更新)
  10. geo差异表达分析_GEO2R差异表达分析软件
  11. Cask ‘libreoffice-still‘ definition is invalid .....unknown or unsupported macOS version: :mavericks
  12. 移动硬盘的选择与购买
  13. 闽侯一中2021年高考成绩查询,2021年福州高考各高中成绩及本科升学率数据排名及分析...
  14. 分享一个非常不错的手机定位网
  15. 预训练模型(PTMs)发展史
  16. 谷歌JsonObject
  17. 固定资产月结\年结流程
  18. 算法学习——双指针,BFS,图论
  19. 开店星简直就是国内优秀的开源商城系统天花板
  20. 微信小程序ocr身份证识别以及手机号获取

热门文章

  1. 关于web页面打开空白的情况
  2. 2017web前端面试总结
  3. 别说我不告诉你,如此养车包你把自己也养穷了……
  4. Convert your single instance to 10g RAC by manual
  5. 开张第一天,一年之际在于春
  6. Q86:镜面反射(Mirror Reflection)
  7. 工业大数据发展面临四方面挑战
  8. 大数据分析的步骤有哪些
  9. 企业如何选择一个合适的可视化工具
  10. 工业大数据的发展面临哪四大挑战