`
izuoyan
  • 浏览: 9223721 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

动态获取当前屏幕中光标所在位置的颜色

阅读更多

//////////////////////////////////////////////////////////////////////////

/// 程序:屏幕取色

/// 功能:动态获取当前屏幕中光标所在位置的颜色

///作者:黎波

///网名:upto(阿球)

/// 邮箱:itfun@163.com

/// 日期:<chsdate year="2004" month="3" day="31" islunardate="False" isrocdate="False" w:st="on"></chsdate>2004331

//////////////////////////////////////////////////////////////////////////

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
namespace LiBo.ColorPicker
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
// 桌面工作区的尺寸
Size workingArea;
// Form 的初始位置和在左下角,右下角的位置
Point formLoc, ptLeftBottom, ptRightBottom;
private System.Windows.Forms.Label lblColor;
private System.Windows.Forms.TextBox txtArgb;
private System.Windows.Forms.Timer tmr;
private System.Windows.Forms.ToolTip tip;
private System.ComponentModel.IContainer components;
public Form1()
{
InitializeComponent();
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
this.StartPosition = FormStartPosition.CenterScreen;
Rectangle rect = SystemInformation.WorkingArea;
workingArea = new Size(rect.Width, rect.Height);
ptLeftBottom = new Point(0, workingArea.Height - this.Height);
ptRightBottom = new Point(workingArea.Width - this.Width,
workingArea.Height - this.Height);
String tipMsg = "在窗体空白处双击鼠标左键开始取色,按ESC键确定颜色";
tip.SetToolTip(this, tipMsg);
tip.SetToolTip(lblColor, tipMsg);
tip.SetToolTip(txtArgb, tipMsg);
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lblColor = new System.Windows.Forms.Label();
this.tmr = new System.Windows.Forms.Timer(this.components);
this.txtArgb = new System.Windows.Forms.TextBox();
this.tip = new System.Windows.Forms.ToolTip(this.components);
this.SuspendLayout();
//
// lblColor
//
this.lblColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.lblColor.Location = new System.Drawing.Point(8, 8);
this.lblColor.Name = "lblColor";
this.lblColor.TabIndex = 0;
//
// tmr
//
this.tmr.Tick += new System.EventHandler(this.tmr_Tick);
//
// txtArgb
//
this.txtArgb.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.txtArgb.Font = new System.Drawing.Font("Arial", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
this.txtArgb.Location = new System.Drawing.Point(8, 40);
this.txtArgb.Name = "txtArgb";
this.txtArgb.TabIndex = 1;
this.txtArgb.Text = "";
this.txtArgb.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtArgb_KeyPress);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(115, 70);
this.Controls.Add(this.txtArgb);
this.Controls.Add(this.lblColor);
this.Name = "Form1";
this.Text = "屏幕取色(upto)";
this.DoubleClick += new System.EventHandler(this.Form1_DoubleClick);
this.MouseEnter += new System.EventHandler(this.Form1_MouseEnter);
this.ResumeLayout(false);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
[ DllImport ( "gdi32.dll" ) ]
private static extern bool BitBlt (
IntPtr hdcDest, // 目标设备的句柄
int nXDest, // 目标对象的左上角的X坐标
int nYDest, // 目标对象的左上角的X坐标
int nWidth, // 目标对象的矩形的宽度
int nHeight, // 目标对象的矩形的长度
IntPtr hdcSrc, // 源设备的句柄
int nXSrc, // 源对象的左上角的X坐标
int nYSrc, // 源对象的左上角的X坐标
int dwRop // 光栅的操作值
);
[ DllImport ( "gdi32.dll" ) ]
private static extern IntPtr CreateDC (
string lpszDriver, // 驱动名称
string lpszDevice, // 设备名称
string lpszOutput, // 无用,可以设定位"NULL"
IntPtr lpInitData // 任意的打印机数据
);
private void Form1_DoubleClick(object sender, EventArgs e)
{
formLoc = this.Location;
this.Location = ptRightBottom;
this.TopMost = true;
tmr.Enabled = true;
}

private void tmr_Tick(object sender, EventArgs e)

{

// 创建显示器的DC

IntPtr hdlDisplay = CreateDC("DISPLAY", null, null, IntPtr.Zero);

// 从指定设备的句柄创建新的 Graphics 对象

Graphics gfxDisplay = Graphics.FromHdc(hdlDisplay);

// 创建只有一个象素大小的 Bitmap 对象

Bitmap bmp = new Bitmap(1, 1, gfxDisplay);

// 从指定 Image 对象创建新的 Graphics 对象

Graphics gfxBmp = Graphics.FromImage(bmp);

// 获得屏幕的句柄

IntPtr hdlScreen = gfxDisplay.GetHdc();

// 获得位图的句柄

IntPtr hdlBmp = gfxBmp.GetHdc();

// 把当前屏幕中鼠标指针所在位置的一个象素拷贝到位图中

BitBlt(hdlBmp, 0, 0, 1, 1, hdlScreen, MousePosition.X, MousePosition.Y, 13369376);

// 释放屏幕句柄

gfxDisplay.ReleaseHdc(hdlScreen);

// 释放位图句柄

gfxBmp.ReleaseHdc(hdlBmp);

lblColor.BackColor = bmp.GetPixel(0, 0); // 获取像素的颜色

txtArgb.Text = "0x" + lblColor.BackColor.ToArgb().ToString("x").ToUpper();

gfxDisplay.Dispose();
gfxBmp.Dispose();

bmp.Dispose(); // 释放 bmp 所使用的资源

}

private void txtArgb_KeyPress(object sender, KeyPressEventArgs e)
{
// 当按下ESC键时,确定所取的颜色ARGB值
// 注意:只有当窗体处于激活状态时才有效
if (e.KeyChar == (char)Keys.Escape)
{
tmr.Enabled = false;
this.Location = formLoc;
this.TopMost = false;
txtArgb.SelectAll();
}
}
private void Form1_MouseEnter(object sender, EventArgs e)
{
if (this.Location == ptLeftBottom) //窗体在左下角
{
this.Location = ptRightBottom;
}
else if (this.Location == ptRightBottom) // 窗体在右下角
{
this.Location = ptLeftBottom;
}
}
}
}
分享到:
评论

相关推荐

    获取光标处的颜色

    在计算机编程中,获取光标处的颜色是一项实用的技术,尤其对于开发者来说,它可以帮助调试图形界面或者进行像素级的操作。这个工具可能是一个小程序,能够实时显示鼠标指针所在位置的像素颜色值。以下是对这个主题的...

    计算机软件-商业源码-获取RichEdit组件中光标所在的行号.zip

    这个商业源码的标题"计算机软件-商业源码-获取RichEdit组件中光标所在的行号.zip"表明它提供了一种方法来获取在RichEdit组件中的光标所在位置的行号。这对于开发文本编辑器或者处理大量文本数据的应用来说是一个非常...

    屏幕取色,屏幕获取颜色软件

    当你在屏幕上移动鼠标时,软件会实时显示当前光标所在位置的颜色值。通常,这些工具还提供多种颜色模式供用户选择,如RGB、CMYK、HSV等,以满足不同领域的需求。 工作原理方面,屏幕取色工具通过捕获操作系统发送到...

    获取颜色值小工具 获取鼠标指定任意位置的颜色值

    在"获取颜色值小工具"中,SimpleColorPick.exe是这个程序的主文件,双击运行后,它会在屏幕上显示一个浮动窗口,窗口中会实时更新鼠标当前位置的颜色值。用户可以通过拖动窗口或调整其大小以适应不同的工作需求。...

    DELPHI获取鼠标坐标处颜色源码

    在DELPHI编程环境中,获取鼠标所在位置的颜色是一项常见的需求,尤其在开发涉及图形界面或者颜色检测的应用时。以下是对这个主题的详细说明。 首先,我们需要理解DELPHI中的基本概念。DELPHI是一个强大的面向对象的...

    光标位置RGB值获取器

    "光标位置RGB值获取器"是一个工具,它允许用户获取鼠标指针所在位置屏幕上像素的RGB(红绿蓝)颜色值。RGB色彩模式是计算机显示颜色的主要方式,通过组合不同比例的红色、绿色和蓝色,可以创建出数百万种不同的颜色...

    鼠标获取屏幕颜色值与类名

    当鼠标在屏幕上移动时,程序会监听鼠标的移动事件,并调用相应的函数或方法来获取当前鼠标位置的RGB颜色值,这通常需要使用到系统级别的API函数,如Windows API中的GetPixel函数。 “类名”和“标题名”的获取则...

    屏幕颜色截取器(制作网页和前台页面必备)

    静态截取是传统的颜色选取方式,用户只需点击鼠标,就能立即获取当前光标所在位置的像素颜色。这种方式适用于快速获取单个颜色值,对于设计中的微调工作非常有帮助。 动态截取则增加了更高效的色彩采集体验。在动态...

    mfc调用大漠插件获取当前鼠标点的坐标颜色特征码

    在本篇中,我们将深入探讨如何利用MFC(Microsoft Foundation Classes)框架调用大漠插件来获取鼠标指针所在位置的颜色特征码。MFC是微软提供的一种C++库,用于构建Windows应用程序,而大漠插件则是一种流行的功能...

    显示当前鼠标位置的背景色

    "显示当前鼠标位置的背景色"是一个功能,它允许用户实时查看鼠标光标所在位置屏幕上像素的颜色值。这个功能通常通过一个应用程序实现,该应用能够捕获并解析屏幕上的颜色信息,并以RGB(红绿蓝)格式显示出来。 RGB...

    在TreeCtrl控件中移动鼠标改变字体及颜色

    通过以上步骤,我们实现了TreeCtrl控件中项的字体颜色随鼠标移动而动态改变的效果。这不仅提高了视觉效果,也为用户提供了一种直观的交互方式,使得用户更容易识别和选择目录。 在实际编程中,还可以根据需求扩展这...

    我写了一个实时捕捉窗口数据,和动态鼠标位置和颜色数据的一个程序,非常好用,是我写的一个第一个窗口程序,欢迎大家使用交流!嘿嘿

    开发者需要使用GDI(图形设备接口)或者更现代的DirectX等图形库,获取鼠标光标所在位置的屏幕像素颜色。这可能需要用到GetPixel函数或者其他类似的API,它们可以读取指定位置的颜色值。 在标签“windows”中,我们...

    屏幕取点工具

    1. 获取坐标:屏幕取点工具的主要功能是显示鼠标光标所在位置的像素坐标,这通常包括X轴和Y轴的值,提供精确的参考点。 2. 多种模式:一些高级的屏幕取点工具可能提供多种模式,如单点取点、矩形区域选取、多边形...

    经典鼠标光标,一共8套

    光标是计算机显示器上一个移动的标记,指示了当前用户的输入焦点所在位置。它通常由箭头、手形、沙漏等形式构成,不同形状的光标代表不同的操作状态,例如,I字形表示文本输入,手形则常用于点击链接或可交互的元素...

    C语言图形编程.doc

    C语言图形编程 C语言图形编程是指使用C语言实现图形编程的技术,主要用于在字符屏幕和图形屏幕上进行图形操作。...例如,字符屏幕光标位置函数gotoxy()将光标移到窗口的x,y位置上,这未必是相对于整个屏幕。

    e语言-屏幕坐标取色器

    屏幕坐标取色器的工作原理是利用操作系统提供的API函数,获取鼠标光标所在位置的像素颜色。当用户按下END键时,程序会读取当前屏幕上的颜色,并将该颜色的RGB(红绿蓝)值复制到系统剪贴板,方便用户粘贴到其他程序...

    屏幕取色工具

    2. **选择颜色**:将鼠标光标移动到屏幕上的目标颜色区域,点击鼠标左键,即可选取当前鼠标所在位置的颜色。有些工具可能通过按住热键(如Ctrl或Alt键)加鼠标左键来选取颜色。 3. **查看颜色信息**:一旦选取颜色...

    RGB颜色读取器

    RGB颜色读取器是一款实用工具,它允许用户在计算机桌面上获取任意位置的颜色信息。这款软件的核心功能是基于RGB(Red, Green, Blue)色彩模型,这是数字图像处理中最常见的一种颜色表示方式。RGB模型通过红、绿、蓝...

    C语言图形编程 (一字符屏幕)

    与 `insline()` 相反,`delline()` 函数用于删除当前光标位置所在的这一行,同时将后续内容上移一行。函数原型为 `void delline(void);`。同样地,此函数也只适用于文本模式下的屏幕操作。使用时需要包含头文件 `...

    查看颜色值

    标题“查看颜色值”指的是一个实用工具,它能够帮助用户实时获取屏幕上鼠标指针所在位置的颜色数值。这个小工具无需安装,意味着用户可以直接运行而无需经过复杂的安装过程,方便快捷。 在计算机图形学和设计领域,...

Global site tag (gtag.js) - Google Analytics