C#屏幕取色(支持Win7 64位 32位 WinXP)
测试过对Win7 64位 32位 WinXP都可用的:
http://www.cnblogs.com/hihell/archive/2011/09/16/2178660.html
网上能找到的几种方法:
方法一:
http://www.cnblogs.com/isaced/archive/2011/01/25/1944630.html
有如下问题:
XP和Win7 32位下完美支持,但Win7 64位下无效,取到的永远是#FFFFFF白色。
关键代码:
[DllImport("user32.dll")]//取设备场景
private static extern IntPtr GetDC(IntPtr hwnd);//返回设备场景句柄
[DllImport("gdi32.dll")]//取指定点颜色
private static extern int GetPixel(IntPtr hdc, Point p);
private void timer1_Tick(object sender, EventArgs e)
{
Point p = new Point(MousePosition.X, MousePosition.Y);//取置顶点坐标
textBox_p.Text = p.X + "," + p.Y;//把坐标显示到窗口上
IntPtr hdc = GetDC(new IntPtr(0));//取到设备场景(0就是全屏的设备场景)
int c = GetPixel(hdc, p);//取指定点颜色
int r = (c & 0xFF);//转换R
int g = (c & 0xFF00) / 256;//转换G
int b = (c & 0xFF0000) / 65536;//转换B
textBox_10jz.Text = c.ToString();//输出10进制颜色
textBox_16jz.Text = r.ToString("x").PadLeft(2, '0') + g.ToString("x").PadLeft(2, '0') + b.ToString("x").PadLeft(2, '0');//输出16进制颜色
textBox_RGB.Text = r.ToString() + ',' + g.ToString() + ',' + b.ToString();//输出RGB
pictureBox_color.BackColor = Color.FromArgb(r,g,b);//设置颜色框
}
说明:
用系统API:GetDC和GetPixel,直接取DC上的颜色值,速度快,内存占用小,问题就是Win7 64位不支持。
方法二:
http://www.cnblogs.com/scy251147/archive/2010/08/12/1798331.html
针对上面的代码多加一点
有如下问题:
XP下一切正常,但在Win7 32位和64位下,状态栏上的开始按钮取到的全部是#FFFFFF,状态栏条上的永远是#000000
关键代码:
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Point Papi = new Point();
GetCursorPos(out Papi);
IntPtr v_hwnd = WindowFromPoint(Papi);
IntPtr v_DC = GetDC(v_hwnd);
ScreenToClient(v_hwnd, ref Papi);
int v_Color = GetPixel(v_DC, Papi);
int v_Red, v_Green, v_Blue;
v_Red = v_Color & 0xff;
v_Green = (v_Color & 0xff00) / 256;
v_Blue = (v_Color & 0xff0000) / 65536;
this.txtRGB.Text ="#"+v_Red.ToString("x").PadLeft(2, '0') + v_Green.ToString("x").PadLeft(2, '0') + v_Blue.ToString("x").PadLeft(2, '0');
this.txtRGBDesc.Text = v_Red.ToString("d") + " " + v_Green.ToString("d") + " " + v_Blue.ToString("d");
this.txtShow.BackColor = Color.FromArgb((int)v_Red, (int)v_Green, (int)v_Blue);
ReleaseDC(v_hwnd, v_DC);
}
说明:
用系统API:GetCursorPos取鼠标绝对位置,WindowFromPoint取鼠标位置所在句柄,GetDC通过句柄取DC,ScreenToClient转换坐标从鼠标绝对位置转为对应句柄内的相对位置,GetPixel根据DC和相对鼠标位置取颜色。
方法三:
对整个屏幕抓屏后放到PictureBox中,再放到全屏用鼠标取上面的点。
缺点就不是动态实时的取点了。
C#屏幕取色(支持Win7 64位 32位 WinXP)相关推荐
- 64位计算机 内存,Win7 64位/32位系统支持多大内存?64/32位系统有什么区别?
Win7 64位/32位系统支持多大内存?计算机上不同的操作系统对内存的支持是有限度的,且因为主板.CPU的存在,这样的限制只会更小,但还在用户可以接受的范围内.想知道什么原因限制了内存极限吗?请看下 ...
- 【装机吧】Win7电脑系统32位和64位区别(详细版)
第一点 设计初衷不同: [win7系统32位和64位区别] 64位操作系统的设计初衷是:满足机械设计和分析.三维动画.视频编辑和创作,以及科学计算和高性能计算应用程序等领域中需要大量内存和浮点性能的 ...
- 网站服务器 64位,如何将win7系统从32位升级到64位_网站服务器运行维护,win7,32位,64位...
win10如何重置此电脑_网站服务器运行维护 win10重置此电脑的方法是:1.点击[开始]按钮,进入设置:2.进入[更新和安全]选项,点击[恢复]:3.找到[重置此电脑],点击[开始]:4.选择[保 ...
- 微软官方原版win7(64位/32位)旗舰版系统下载
http://blog.sina.com.cn/s/blog_541caaee01014q8t.html 好多友友一直在问,需要微软官方win7系统,特别是64位win7旗舰版由于联想官方(其他品牌相 ...
- Win7可用的笔记本电池校正软件( 64、32位)
Win7可用的笔记本电池校正软件( 64.32位) BatteryMon2.1-Win7可用.rar (258.7 KB)
- 微软官方原版win7(64位/32位)旗舰版系统下载【适合所有品牌】 此博文包含图片 转载▼...
好多友友一直在问,需要微软官方win7系统,特别是64位win7旗舰版由于联想官方(其他品牌相同)没有提供(只有家庭基础版),好多都需要.网上虽然也有,但是良莠不齐,需要自己去甄别,这对于新手很困难的 ...
- win10系统下载中文版 64位32位 官方版
win10系统下载中文版 64位&32位 官方版 软件大小:4.9GB 软件语言:简体中文 软件类别:操作系统 软件授权:官方版 更新时间:2015-01-22 应用平台:/Win8/Win7 ...
- cad2014 64位32位 免费中文版
cad2014 64位&32位 免费中文版 软件大小:1.31GB 软件语言:简体中文 软件类别:图像制作 软件授权:免费版 应用平台:/Win8/Win7/WinXP 最大的改进就是新增了 ...
- Windows8简体中文 旗舰版 专业版 64位 32位 全系列 及win8 神key
Windows8简体中文 旗舰版 专业版 64位 32位 全系列 及win8 神key (2012-08-20 16:16:53) 转载▼ 标签: windows8 简体中文 旗舰版 专业版 64位 ...
最新文章
- 微架构设计:微博计数器的设计
- 关于常用的编码工具如何引入jar包
- NOI图论算法:二分图匹配
- android 携程日历控件,仿携程酒店日历组件for小程序
- ASP.NET 验证控件总结
- Java抓取淘宝/天猫商品详情 1
- 基于Springboot的医院药品管理系统的设计与实现.zip(论文+项目源码)
- 动易html编辑器漏洞,动易网站管理系统删除任意文件漏洞
- 动听百年:音乐播放器发展沉浮史
- js return加分号_JavaScript 语句后应该加分号么?
- 【WEB】web www http html hypermedia hypertext 技术名词的意思
- Navicat工具中数据库导入导出
- 计算机常见的三种bios,各种类型电脑进入BIOS方法汇总,包含中英文对照图表!...
- 计算机d代表什么,DVI-D和DVI-I区别是什么?
- 不等式大两边小中间_不等式取值范围口诀
- 穷爸爸,富爸爸学习笔记
- ARM base instruction -- cmn
- 中国楼市房贷真相:只有傻瓜才自掏腰包!
- 基于matlab的步进电机转速控制仿真,基于matlab的步进电机转速控制仿真
- Word2Vec源码解析