.net实现屏幕任意点颜色拾取

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

图1 Color Picker(很土啊)

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

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

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

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

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

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
8{
9  internal class PointColorPicker
10  {
11    private static Bitmap cache = new Bitmap(1, 1);
12    private static Graphics tempGraphics = Graphics.FromImage(cache);
13
14    /**//// <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)
20    {
21      tempGraphics.CopyFromScreen((int)point.X, (int)point.Y, 0, 0, new Size(1, 1));
22
23      return cache.GetPixel(0, 0).Upgrade();
24    }
25  }
26}

完整的代码下载

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索问题
, 颜色
, graphics
, system
, 钩子
, bitmap c# c++
, 鼠标拾取
, 拾取
, WPF C++ DLL 混编
, CopyFromScreen
一个
屏幕颜色拾取器、屏幕颜色拾取工具、屏幕颜色拾取、小蜜蜂屏幕颜色拾取器、颜色拾取器,以便于您获取更多的相关知识。

时间: 2024-09-20 00:00:48

.net实现屏幕任意点颜色拾取的相关文章

如何获取屏幕上各颜色的红、绿、蓝值

在桌面上运行各种程序中,有很多色彩十分靓丽,我们有时也想使用它们的颜色,但苦于没有源码,所以很难准确知道它们的R.G.B颜色值.于是便产生了很多拾取屏幕颜色的工具,你想知道它们是怎么用程序实现的么?下面我就拿我用VC6.0做的一个屏幕颜色拾取器的实例代码来告诉您,实例程序运行后的界面如下: 基本构成思想: 原理很简单,只需要简要的三步.既:获取屏幕DC.得到当前鼠标所在的像素值.分解出像素值中的红.绿.蓝三色既可,很简单吧! 关键代码实现: 1. 获取屏幕DC HDC hDC = ::GetDC

VB.NET设置屏幕分辨率、颜色位数、刷新率 实例代码

这篇文章介绍了VB.NET设置屏幕分辨率.颜色位数.刷新率 实例代码,有需要的朋友可以参考一下   复制代码 代码如下: Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare Function ChangeDisplaySettings Lib "user32" Alias "C

颜色识别-opencv如何实现动态跟踪屏幕上某种颜色的物体并输出当前在视频中的位置

问题描述 opencv如何实现动态跟踪屏幕上某种颜色的物体并输出当前在视频中的位置 求大神帮忙解决 想通过摄像头去追踪画面上的某种单色的物体(球状的) 然后输出其位置 或者有没有别的更好的办法 求大神啊啊 解决方案 题主您好,请问您的摄像头指的是现实生活中的摄影,还是游戏动画?

android开发 如何实现 监听点击屏幕任意位置事件

问题描述 android开发 如何实现 监听点击屏幕任意位置事件 好比一个导航页,当滑倒最后一页时,提示用户点击屏幕的任意位置进入MainActivity.这种点击事件如何响应? 解决方案 原来是这样的啊啊,这下我知道啦 解决方案二: 最简单的就是,在视图最上面加个控件(全屏显示),背景设置为透明,先设置为gone,滑动到最后页面,显示出来就可以了,然后给这个控件加个事件--

Dialog(九)——利用WindowManager在屏幕任意位置添加Dialog

MainActivity如下: package cn.testalertdialog; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import andro

10 个很棒的 JavaScript 颜色拾取器插件

MooRainbox JavaScript ColorPicker JPicker – A jQuery Color Picker jPicker 是一个快速.轻量级的 jQuery 插件,提供高级的颜色拾取功能. Color Picker 类似 PhotoShop 的颜色选择器 ExColor jQuery 的颜色选择插件 Izzy Color Picker Flexi Flexi是一个简单.轻量级颜色拾色器,基于SVG/VML技术实现.它没有基于依赖任何JavaScript框架开发,能够将选

用VB编写一个屏幕颜色拾取器

设计状态下窗口中添加两个Frame控件做为容器,加入二个PictureBox控件,一个PictureClip控件(其中装入一个设计好的鼠标指针Mask图片),两个文本框控件,几个Label控件,两个Command控件,一个CheckBox控件. 代码如下: Option Explicit Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As LongPrivate Declare Functi

用实验中的Actionscript 3.0实现颜色拾取

var linkageId = "Bliss.jpg"; var myBitmapData = flash.display.BitmapData.loadBitmap(linkageId); var mc = this.createEmptyMovieClip("mc", this.getNextHighestDepth()); mc.attachBitmap(myBitmapData, this.getNextHighestDepth()); var colorT

如何设置屏幕分辨率、颜色位数、刷新率

分辨率|刷新 '////////////////////////////////'//'//griefforyou收集整理'//'////////////////////////////////Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As LongPrivate Declare Function ChangeDisplaySettings L