最好用的取色器,颜色转换器
Posted jy8888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最好用的取色器,颜色转换器相关的知识,希望对你有一定的参考价值。
你有没有遇到过这样的情况,浏览网页或者浏览图片或者工作中,突然看到一个颜色,特别想拿到这个RGB颜色或者16进制颜色。(然后解决的方法就是截图存下来,拿到PS里去查看颜色。)
你还有没有遇到过这样的情况,只有一个RGB颜色或者16进制颜色,却无法转换。(然后解决的方法就是截图存下来,拿到PS里去转换颜色。)
所以今天花了点时间做了一款小工具。虽然很小但却很好用,大小仅有39kb。但是代码却很强大,甚至会被杀软误报(由于使用了键盘钩子,完全无毒请放心使用)。
(一)颜色拾取
引用系统API
/// <summary> /// 获取指定窗口的设备场景 /// </summary> /// <param name="hwnd">将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC</param> /// <returns>指定窗口的设备场景句柄,出错则为0</returns> [DllImport("user32.dll")] public static extern IntPtr GetDC(IntPtr hwnd); /// <summary> /// 释放由调用GetDC函数获取的指定设备场景 /// </summary> /// <param name="hwnd">要释放的设备场景相关的窗口句柄</param> /// <param name="hdc">要释放的设备场景句柄</param> /// <returns>执行成功为1,否则为0</returns> [DllImport("user32.dll")] public static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc); /// <summary> /// 在指定的设备场景中取得一个像素的RGB值 /// </summary> /// <param name="hdc">一个设备场景的句柄</param> /// <param name="nXPos">逻辑坐标中要检查的横坐标</param> /// <param name="nYPos">逻辑坐标中要检查的纵坐标</param> /// <returns>指定点的颜色</returns> [DllImport("gdi32.dll")] public static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
不知道为何用下面的引用就是获取不到颜色,一直返回-1
private static extern int GetPixel(IntPtr hdc, Point p);
调用方法如下
public Color GetColor(int x, int y) { IntPtr hdc = GetDC(IntPtr.Zero); uint pixel = GetPixel(hdc, x, y); ReleaseDC(IntPtr.Zero, hdc); Color color = Color.FromArgb((int)(pixel & 0x000000FF), (int)(pixel & 0x0000FF00) >> 8, (int)(pixel & 0x00FF0000) >> 16); return color; }
效果如图
由于颜色拾取是根据鼠标位置来拾取的,那怎么把颜色锁住呢?这就需要键盘钩子了,需要监听鼠标按键,光程序内部的MouseClick是不行的,当窗体没有激活的时候也需要获取颜色。所以用到了键盘钩子,键盘钩子代码量太大就不发了,有兴趣的可以联系我。键盘钩子会被部分杀软报毒,原因是它可以监视鼠标和键盘,打密码也会被监视,这个就有点恐怖了。
(二)颜色转换
这个功能的代码就相对简单了。不管怎么转换只要能拿到Color就可以互相转换。代码如下:
RGB转Color
try { string rgbstr = txt_rbg1.Text.Replace(",", ","); int[] list = Array.ConvertAll<string, int>(rgbstr.Split(‘,‘), x => Convert.ToInt32(x)); if (list.Length == 3) { Color c = Color.FromArgb(list[0], list[1], list[2]); JConvert(c); } } catch { return;
16进制颜色转Color
try { Color c = System.Drawing.ColorTranslator.Fromhtml(txt_color161.Text); JConvert(c); } catch { return; }
效果如图
最后放出链接
https://pan.baidu.com/s/1aiNgsIDnKLTx8nq1XtvOBA
以上是关于最好用的取色器,颜色转换器的主要内容,如果未能解决你的问题,请参考以下文章