小工具:截图&简单图像处理
一、程序运行截图
二、获取屏幕截图的方法
首先知道我们可以通过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 ...
随机推荐
- AdaBoost对实际数据分类的Julia实现
写在前面 AdaBoost是机器学习领域一个很重要很流行的算法,而Julia是一门新兴的发展迅速的科学计算语言.本文将从一个实际例子出发,展示如何用Julia语言实现AdaBoost算法. 什么是Ad ...
- c#代码技巧
1.#region #endregion 1.#region 是一个分块预处理命令,主要用于编辑代码分段,在编译时会自动屏蔽,同时该指令可以使代码在VS代码编辑器中折叠或展开: 2.#region必须 ...
- Head First设计模式之生成器模式
一.定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一种对象创建型模式. 二.结构 角色 Builder(抽象建造者):它为创建一个产品Product对象的 ...
- grpc介绍
grpc入门(一) 一.什么是grpc grpc是谷歌开源的一款高性能的rpc框架 (https://grpc.io),可以使用protocol buffers作为IDL(Interface Defi ...
- TurnipBit开发板DIY呼吸的吃豆人教程实例
转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) 0x00前言 吃豆人是耳熟能详的可爱形象,如今我们的TurnipBit也 ...
- System.Windows.Forms.PropertyGrid的使用
PropertyGrid 控件简介 .NET 框架 PropertyGrid 控件是 Visual Studio .NET 属性浏览器的核心.PropertyGrid 控件显示对象或类型的属性,并主要 ...
- Java中ArrayList与LinkedList的区别
Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别: 1. ArrayList的实现是基于数组,LinkedList的实现是基于双向 ...
- Go从三个站点中返回响应最快的
利用协程可以轻松实现 package main import ( "fmt" "github.com/imroc/req" ) func mirroredQue ...
- 使用Git命令把本地项目上传到github上托管
(1)在github上,新建一个仓库 (2)打开git-bash,进入项目目录下 (3)git init (4)git add . (5)git status (6)git commit -m &qu ...
- Pandas系列之入门篇
Pandas系列之入门篇 简介 pandas 是 python用来数据清洗.分析的包,可以使用类sql的语法方便的进行数据关联.查询,属于内存计算范畴, 效率远远高于硬盘计算的数据库存储.另外pand ...