当前位置: 首页 > news >正文

屏幕任意点颜色拾取

发现很多软件颜色都很养眼,却不知具体的颜色值是多少,好参考一下。于是想做个屏幕取色的东西。不过这个东西纯粹是为了技术目的,用QQ就可以搞到这个颜色值,就连画笔都可以,只不过复杂些罢了。先把效果放上来。如图1

 

 

 

1 Color Picker(很土啊)

 

做这个东西只要解决如下的两个问题:

1.       全局鼠标钩子:做这个东西的唯一一个技术难点,虽然网上有各种C++DLL实现方式,但是总觉得为了一个HOOK,在C#的项目里建立一个C++的项目感觉很不爽。后来终于找到了不需要新建项目的方法。(下文介绍。)

2.       获取鼠标所在点的颜色值。对于有经验的人来说,这个不是个问题。没有经验的人,Google一下,其实也不是个问题。

 

微软的一篇帮助文档上信誓旦旦地说“Global hooks are not supported in the .NET framework”。不知害得多少人绕过.NET去实现全局钩子。可就是有人不信这个邪,做出了不需要DLLC#实现的全局钩子(参见此文)。虽然只限于鼠标、键盘钩子,但也足够用了。

 

第一个问题算是解决了。再来看第二个问题。屏幕取色。稍稍Google一下就可以知道,用Graphics对象的CopyFromScreen方法就可以了。可是GraphicsForm里的东西,在WPF里没有Graphics对象啊。当然也可以再来个API调用的,不过总感觉直接调用API不好。所以想来想去,还是在这个WPF项目里添加了对System.Drawing的引用。并把它包成了一个类。代码如下。

  

ContractedBlock.gif ExpandedBlockStart.gif PointColorPicker
 1using System.Windows;
 2using System.Windows.Media;
 3using Bitmap = System.Drawing.Bitmap;
 4using Graphics = System.Drawing.Graphics;
 5using Size = System.Drawing.Size;
 6
 7namespace ColorPicker
 8ExpandedBlockStart.gifContractedBlock.gif{
 9    internal class PointColorPicker
10ExpandedSubBlockStart.gifContractedSubBlock.gif    {
11        private static Bitmap cache = new Bitmap(11);
12        private static Graphics tempGraphics = Graphics.FromImage(cache);
13
14ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
15        /// Gets the Color from the screen at the given point.
16        /// </summary>
17        /// <param name="point"></param>
18        /// <returns></returns>

19        public static Color GetColorFromPoint(Point point)
20ExpandedSubBlockStart.gifContractedSubBlock.gif        {
21            tempGraphics.CopyFromScreen((int)point.X, (int)point.Y, 00new Size(11));
22
23            return cache.GetPixel(00).Upgrade();
24        }

25    }

26}

 

 完整的代码下载

 

相关文章:

  • 明天就要参加第三届D2论坛了
  • 一步一步搭建免费的Silverlight 2开发环境
  • Web发展史上十件大事:Linux、Firefox入选
  • linux服务器配置实例1---Linux网络基础
  • 消息来时让网页标题闪动
  • 随便写一点
  • [转贴]关于单位内部实施ITSM一般性服务台模型的思考
  • 记号
  • iptraf网络监控
  • 网路管理
  • Centos下***(pptpd)的部署
  • squid的安装使用
  • 活动目录—远程安装额外域控制器
  • 配置 Site-to-Site and Extranet ×××
  • sharepoint中eventhandler的ItemUpdated
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 从零搭建Koa2 Server
  • 力扣(LeetCode)56
  • 通过git安装npm私有模块
  • 我的zsh配置, 2019最新方案
  • 我有几个粽子,和一个故事
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​比特币大跌的 2 个原因
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $(function(){})与(function($){....})(jQuery)的区别
  • (09)Hive——CTE 公共表达式
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)linux 命令大全
  • .bat文件调用java类的main方法
  • .NET : 在VS2008中计算代码度量值
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net MVC + EF搭建学生管理系统
  • .net web项目 调用webService
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET成年了,然后呢?
  • .Net多线程总结
  • .NET开源快速、强大、免费的电子表格组件
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @angular/cli项目构建--Dynamic.Form
  • @Autowired和@Resource装配
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @Validated和@Valid校验参数区别
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [BZOJ1053][HAOI2007]反素数ant
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [codeforces]Levko and Permutation
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案