小工具:截图&简单图像处理
一、程序运行截图
二、获取屏幕截图的方法
首先知道我们可以通过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 ...
随机推荐
- Cat 客户端采用什么策略上报消息树
策略分类 目前搞清楚两种 第一种(蓝色):默认服务器列表中选一个,算法核心是根据应用名的哈希值取模.也就是说同一个应用始终打到同一台服务器上,如果这台服务器挂了,另选一台服务器. 第二种(红色):应用 ...
- 关于VS2017安装的一点扩充说明(15.5)
其实逆天不推荐自己慢慢离线,找个离线包更新下再打包更快 Key:http://www.cnblogs.com/dunitian/p/4667038.html VS完整卸载工具:https://gith ...
- 《Create Your own PHP Framework》笔记
前言 大力推荐该教程:<Create Your own PHP Framework> Symfony的学习蛮累的,官方文档虽然很丰富,但是组织方式像参考书而不是指南,一些不错的指导性文档常 ...
- 序列化之对象,字符串,byte数组,XML之间的转换(一)
工作一年多了,越来越感到自己不能这样一直下去,在最好的青春里面却已经死了.被时间消磨了意志,被工作杀死了精神.我想,我只要活着,我就要去不断的要求自己,不断的去追求更高的山峰. 放眼四周,有趣的灵魂越 ...
- [SDOI2009]E&D
题目描述 小E 与小W 进行一项名为“E&D”游戏. 游戏的规则如下: 桌子上有2n 堆石子,编号为1..2n.其中,为了方便起见,我们将第2k-1 堆与第2k 堆 (1 ≤ k ≤ n)视为 ...
- 实现Windows程序的数据更新
枚举是一组描述性的名称定义一组有限的值,不包含方法对可能的值进行约束枚举是一组指定的常数,对可能的值进行约束枚举使用时直观方便.更易于维护 pictureBox控件属性名称 说明image ...
- Javascipt数组
Javascipt数组 在Javascript中数组的做用是:使用单独的变量名来储存一系列的值. 数组只有一个属性,就是length,length表示的数组所占内存空间的数目. <!DOCTYP ...
- Protobuf的简单介绍、使用和分析
Protobuf的简单介绍.使用和分析 一.protobuf是什么? protobuf(Google Protocol Buffers)是Google提供一个具有高效的协议数据交换格式工具库( ...
- vue cli搭建项目及文件引入
cli搭建方法:需安装nodejs先 1.npm install -g cnpm --registry=https://registry.npm.taobao.org //安装cnpm,用cnpm下载 ...
- MicroPython开发之物联网快速开发板
Python的火热让其运行在MCU端的MicroPython也逐渐迎来了春天.MicroPython的出现让Python这种"胶水语言"成功引用到嵌入式领域,也使得Python控制 ...