先睹为快
使用方法:(喜欢就点击下关注哦,您的红心是我努力的方向!谢谢)
鼠标移动到 红色图标按钮处,按下鼠标左键(不松开)移动鼠标到取色的位置(目标处)松开鼠标即可自动取色。
RGB值:自动填写到对应值中
HEX值:自动填入其中,鼠标点击值自动复制到剪切板。
窗口功能:置顶(窗口最上方,默认)。透明:窗口有一定透明度(可能影响直观看色)
时间显示,提示文本。
软件不复杂,不喜勿喷!有用则用,没用欢迎评论,勿喷。谢谢!
分享就来点干货(不懂的路过即可,关键是分享的精神,呵呵)
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
/// <summary>
/// 该函数检索指定坐标点的像素的RGB颜色值。
/// </summary>
/// <param name="hDC">设备环境句柄。</param>
/// <param name="nXPos">指定要检查的像素点的逻辑X轴坐标。</param>
/// <param name="nYPos">指定要检查的像素点的逻辑Y轴坐标。</param>
/// <returns>返回值是该象像点的RGB值。如果指定的像素点在当前剪辑区之外;那么返回值是CLR_INVALID。</returns>
[DllImport("gdi32")]
public static extern uint GetPixel(IntPtr hDC, int nXPos, int nYPos);
/// <summary>
/// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,
/// 以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。
/// </summary>
/// <param name="hWnd">设备上下文环境被检索的窗口的句柄,如果该值为NULL,GetDC则检索整个屏幕的设备上下文环境。</param>
/// <returns>如果成功,返回指定窗口客户区的设备上下文环境;如果失败,返回值为Null。</returns>
[DllImport("user32")]
public static extern IntPtr GetDC(IntPtr hWnd);
[DllImport("user32")]
public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
/// <summary>
/// 显示设备上下文环境的句柄。
/// </summary>
private IntPtr _hdc = IntPtr.Zero;
/// <summary>
/// 指向窗口的句柄。
/// </summary>
private readonly IntPtr _hWnd = IntPtr.Zero;
核心代码
System.Drawing.Point p = MousePosition;
tipMouse.Text = string.Format("X:{0},Y:{1}", p.X, p.Y);
uint color = GetPixel(_hdc, p.X, p.Y);
byte r = GetRValue(color);//红
byte g = GetGValue(color);//绿
byte b = GetBValue(color);//蓝
txtR.Text = Convert.ToString(r);
txtG.Text = Convert.ToString(g);
txtB.Text = Convert.ToString(b);
picColor.BackColor = Color.FromArgb(r, g, b);//预览结果色值
txtHexColor.Text = "#" + r.ToString("X").PadLeft(2, '0') + g.ToString("X").PadLeft(2, '0') +b.ToString("X").PadLeft(2, '0');
/// <summary>
/// 鼠标按下
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetColor_MouseDown(object sender, MouseEventArgs e)
{
try
{
_hdc = GetDC(_hWnd);//获取句柄
Cursor = Cursors.Cross;
timer1.Enabled = true;
btnGetColor.Image = Properties.Resources.Mouse_30;//修改按钮图标
}
catch { }
}
/// <summary>
/// 鼠标抬起
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetColor_MouseUp(object sender, MouseEventArgs e)
{
try
{
ReleaseDC(_hWnd, _hdc);//释放句柄
Cursor = Cursors.Default;
timer1.Enabled = false;
picColor.BackColor = Color.FromArgb(int.Parse(this.txtR.Text), int.Parse(this.txtG.Text), int.Parse(this.txtB.Text));
txtHexColor_MouseClick(sender, e);//自动复制
btnGetColor.Image = Properties.Resources.Mouse_3;//修改按钮图标
}
catch { }
}