小工具:截图&简单图像处理
一、程序运行截图

二、获取屏幕截图的方法
首先知道我们可以通过Screen.PrimaryScreen.Bounds获取到当前整个屏幕,再利用Bitmap和Graphics就可以得到整个屏幕的图片了。
Screen.PrimaryScreen.WorkingArea这个获得是不包含任务栏的屏幕
获取屏幕代码如下所示:
/// <summary>
/// 获取屏幕图片
/// </summary>
private void GetScreenImage()
{
Bitmap bitMap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bitMap);
g.CopyFromScreen(, , , , new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
}
这样获得的屏幕截图并不能满足我们的要求,我们需要的是要想QQ那样的可以可以自己选区域的截图,这个功能待以后有时间再研究如何实现。
三、简单图像处理
获得图片后,我们总是想要对它进行一些处理,实现不同的效果。为了实现一些效果,我们需要对图片的每个像素进行修改。

3.1 黑白效果

实现方法:
1 /// <summary>
/// 黑白效果
/// </summary>
public Bitmap ImgBlackWhite(Bitmap bitmap)
{
for (int i = ; i < bitmap.Width; i++)
{
for (int j = ; j < bitmap.Height; j++)
{
Color pixel = bitmap.GetPixel(i, j);
int avg = GetBWNum(pixel, EnumUtil.Calculate.加权算法);
int r = avg;
int g = avg;
int b = avg;
bitmap.SetPixel(i, j, Color.FromArgb(r, g, b));
}
}
return bitmap;
} /// <summary>
/// 黑白效果算法
/// </summary>
/// <param name="pixel"></param>
/// <param name="calcul"></param>
/// <returns></returns>
private int GetBWNum(Color pixel, EnumUtil.Calculate calcul)
{
int result = ;
switch (calcul)
{
case EnumUtil.Calculate.加权算法:
result = ((int)(0.7 * pixel.R) + (int)(0.2 * pixel.G) + (int)(0.1 * pixel.B));
break;
case EnumUtil.Calculate.平均值:
result = (pixel.R + pixel.G + pixel.B) / ;
break;
case EnumUtil.Calculate.最大值:
result = pixel.R > pixel.G ? pixel.R : pixel.G;
result = result > pixel.B ? result : pixel.B;
break;
}
return result;
}
3.2 负片效果

实现方法:
/// <summary>
/// 负片效果
/// </summary>
public Bitmap ImgNagative(Bitmap bitmap)
{
for (int i = ; i < bitmap.Width; i++)
{
for (int j = ; j < bitmap.Height; j++)
{
Color c = bitmap.GetPixel(i, j); int r = - c.R;
int g = - c.G;
int b = - c.B;
bitmap.SetPixel(i, j, Color.FromArgb(r, g, b));
}
}
return bitmap;
}
3.3 浮雕效果

实现方法:
/// <summary>
/// 浮雕效果
/// </summary>
public Bitmap ImgCameo(Bitmap bitmap, EnumUtil.ImageStyle style)
{
Color pixel, pixel2; for (int i = ; i < bitmap.Width - ; i++)
{
for (int j = ; j < bitmap.Height - ; j++)
{
pixel = bitmap.GetPixel(i, j);
pixel2 = bitmap.GetPixel(i + , j + );
bitmap.SetPixel(i, j, ImgCameoCalcul(pixel, pixel2, style));
}
}
return bitmap;
} /// <summary>
/// 浮雕算法
/// </summary>
/// <param name="pixel"></param>
/// <param name="pixel2"></param>
/// <param name="style"></param>
/// <returns></returns>
private Color ImgCameoCalcul(Color pixel, Color pixel2, EnumUtil.ImageStyle style)
{
Color cResult;
int r = , g = , b = ;
switch (style)
{
case EnumUtil.ImageStyle.浮雕阴刻:
r = Math.Abs(pixel.R - pixel2.R + ) > ? : Math.Abs(pixel.R - pixel2.R + );
g = Math.Abs(pixel.G - pixel2.G + ) > ? : Math.Abs(pixel.G - pixel2.G + );
b = Math.Abs(pixel.B - pixel2.B + ) > ? : Math.Abs(pixel.B - pixel2.B + );
break;
case EnumUtil.ImageStyle.浮雕阳刻:
r = Math.Abs(pixel2.R - pixel.R + ) > ? : Math.Abs(pixel2.R - pixel.R + );
g = Math.Abs(pixel2.G - pixel.G + ) > ? : Math.Abs(pixel2.G - pixel.G + );
b = Math.Abs(pixel2.B - pixel.B + ) > ? : Math.Abs(pixel2.B - pixel.B + );
break;
}
cResult = Color.FromArgb(r, g, b);
return cResult;
}
小工具:截图&简单图像处理的更多相关文章
- 小工具:天气查询 Vs自定义设置 DevGridControl中GridView排序问题 小工具:火车票查询 小工具:邮件发送 小工具:截图&简单图像处理
小工具:天气查询 开发一个天气查询的工具主要由两步构成,一是数据的获取,二是数据的展示. 一.数据获取 数据获取又可以分为使用其它公司提供的API和手动抓取其它网站数据. 1. 某公司提供的AP ...
- 用C语言实现解析简单配置文件的小工具
本文介绍作者写的一个小工具,简单的代码中包含了C语言对字符串的处理技巧,对文本文件的简单解析,二进制文件的数据复制的方法,以及格式化输出文本文件的示例. 工具的输入是如下内容的配置文件: ;资源管理器 ...
- 2014年Windows平台软件推荐:神器小工具(骨灰级
原文 http://www.wtoutiao.com/a/120621.html 底层工具 “If you know how to use Process Monitor competently, ...
- Windows平台软件推荐:神器小工具(骨灰级)
底层工具 "If you know how to use Process Monitor competently, people of both sexes will immediately ...
- Visual Subst - 简单将任意文件夹挂载模拟成驱动器盘符硬盘分区的小工具
随着电脑的使用,硬盘里的资料一天比一天多,也越来越杂乱.一些朋友为了方便文件管理,会考虑重新分区,让C.D.E等盘符分别担任不同的角色.不过,不分区的话也有一些小工具可以帮你实现. Visual Su ...
- 用C#Winform写个简单的批量清空文件内容和删除文件的小工具
用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013 ...
- 原创SQlServer数据库生成简单的说明文档小工具(附源码)
这是一款简单的数据库文档生成工具,主要实现了SQlServer生成说明文档的小工具,目前不够完善,主要可以把数据库的表以及表的详细字段信息,导出到 Word中,可以方便开发人员了解数据库的信息或写技术 ...
- 原创SQlServer数据库生成简单的说明文档包含(存储过程、视图、数据库批量备份)小工具(附源码)
这是一款简单的数据库文档生成工具,主要实现了SQlServer生成说明文档的小工具,目前不够完善,主要可以把数据库的表以及表的详细字段信息,导出到 Word中,可以方便开发人员了解数据库的信息或写技术 ...
- autoit获取ie浏览器简单操作网页(GUI小工具)
需要稍稍熟悉一下autoti提供的语言, 我简单做了一个带GUI的小工具,实现根据IE标题点击页面内的LinkText 注意:使用时IE窗口是显示状态才可以获取到(可以在脚本中加入搜索IE句柄,将ie ...
随机推荐
- 【ASP.NET MVC系列】浅谈NuGet在VS中的运用
一 概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...
- 6.Nginx作为负载均衡服务器应用
案例:Nginx作为负载均衡服务器应用 nginx的负载均衡功能是通过upstream命令实现的,因此他的负载均衡机制比较简单,是一个基于内容和应用的7层交换负载均衡的实现.Nginx负载均衡默认对后 ...
- java 操作本地数据库 mysql
单线程版 /** * */ import java.sql.*; import java.util.Date; import org.omg.CORBA.PUBLIC_MEMBER; /** * @a ...
- Xamarin.Android 使用Timer 并更改UI
http://blog.csdn.net/ozhangsan12345/article/details/72653070 第一步:创建timer对象 //创建timer对象 Timer _dispat ...
- 豹哥嵌入式讲堂:ARM开发之文件详解(3)- project文件
大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的project文件. 前面两节课里,豹哥分别给大家介绍了嵌入式开发中的两种典型input文件:source文件.linker文 ...
- Nodejs的运行原理-调用篇
前言 之前做过Nodejs的架构篇, 有很多朋友留言给我,说没看懂里面的例子,这里我会重新梳理一下,再以http server为例,来解析Nodejs从前端到libuv的调用过程. 正文 回忆a. N ...
- 三栏布局之 css3 calc和 flex
圣杯布局的实现,有很多种. 大致都是借助 padding, margin, float之类的,当然这是传统的实现方式.更多的参考方式圣杯布局小结. 这里说的是用css3 cal 和flex来实现,因为 ...
- Python(一)字符串用法
一.程序输出 :print 在Python2.X中,print 的用法是 : print "hello word! " 在Python3.X中,print作为函数的方式出现,用法: ...
- python3基础(七)函数基础
Function 函数是一段组织好的能够实现特定功能或者逻辑的代码块,函数代码在文件执行时读入内存并不执行,在调用函数时执行,简单来说是把一段代码封装给一个函数名(可以用变量的概念去理解,即把一段代码 ...
- 简易 bokeh 图像散景效果算法实现
bokeh百度百科的解释 摄影镜头光圈大小和拍摄距离决定了拍摄时的景深,相对于焦点位置,焦点前与焦点后的被拍摄物体会显得模糊,这个模糊区域被称为焦外.焦外具体的模糊程度还受到镜头中镜片单体和组合的物理 ...