delphi如何获取鼠标当前位置颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi如何获取鼠标当前位置颜色相关的知识,希望对你有一定的参考价值。

delphi如何获取鼠标当前位置颜色

使用这个函数,
COLORREF GetPixel(
HDC hdc, // handle to DC
int nXPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);

可以调用之前调用GerCursorPos 来获取鼠标在屏幕上的位置,
如果仅仅是为了取色的话,桌面窗口的HDC的获取,调用GetDC(NULL)来获取到,(不知到delphi里NULL写成什么样子,写成 GetDC(0)也可以。)

在把GerCursorPos 获取的屏幕坐标也给传过去,GetPixel即可返回屏幕坐标的相应颜色值了。

COLORREF 是一个 DWORD 类型,自己分析高低为就可以知道RGB值了。
可以参考使用GetRValue,GetGValue,GetBValue 宏
参考技术A 1.取全屏为一bmp图像,在该BMP上用pixel()判断,缺点是如果有Directx窗口可能不成功,如游戏和视频窗口。

Python制作拾色器!鼠标点击即可获取当前位置的颜色!

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨朱小五

来源丨快学Python

大家好,我是小五🧐

我们做可视化经常会遇到配色问题,如果是在PPT中,只需使用颜色填充的取色器功能,就可以获取指定点的颜色,为自己作品增香添色。

上篇文章说到,我用Python也实现了一个类似的拾色器,今天就来讲一讲具体是怎么做到的!

如上图所示,运行时只需鼠标点击,就可以获取当前图片位置的颜色。

颜色值转换

opencv读取图片的默认像素排列是BGR,具体为什么这么设计,这里就不展开了,感兴趣的小伙伴可以参考这篇文章:https://learnopencv.com/why-does-opencv-use-bgr-color-format/

而实际上最常见的是RGB颜色,也是Photoshop中默认使用的颜色,也是最常用的一种颜色模式。RGB模式的图像由3个颜色通道组成,分别为红色通道(Red)、绿色通道(Green)和蓝色通道(Blue),这三个通道组合可以产生1670万余种不同的颜色。

我们其实可以使用opencv自带函数,转换图像的R通道和B通道。

cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

另外,还有一些小伙伴更熟悉十六进制颜色码。

在搜索引擎中,可以轻松找到颜色值在线转换网址。在Python中,则需要根据规则自定义个转换函数。

def rgb2hex(RGB):
    text = '#' + ''.join([hex(i)[-2:].replace('x', '0') for i in list(map(int, RGB))])
    return text

这样就再也不怕颜色值转换了。

鼠标交互获取颜色

回到本文最开始,一个拾色器最核心的就是鼠标交互功能。

# 定义鼠标交互函数

def get_Color(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        points = rgb2hex(img[y, x])
        print(points)
        cv2.circle(img, (x, y), 3, (255, 255, 255), thickness=2)
        cv2.putText(img, points, (x, y), cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 0), thickness=2)
        cv2.imshow("image", img)

cv2.namedWindow("image")
cv2.setMouseCallback("image", get_Color)
cv2.imshow("image", img)
cv2.waitKey(0)

上述代码中的opencv函数都比较好理解,简单解释一下其中的参数吧。

cv2.circle()中的几个参数分别为:图片,圆心,半径,颜色,线条的粗细。

cv2.putText()中的几个参数分别为:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细。

运行效果:

最后再验证一下,提取到的颜色是否正确?

可以拿一张带有颜色码的图片,运行我们的程序试试。

验证成功,测试得到的十六进制颜色码与正确答案一致!

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

以上是关于delphi如何获取鼠标当前位置颜色的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 获取当前鼠标下的控件内容

html,js如何获取当前鼠标位置

html,js如何获取当前鼠标位置

Delphi如何在控件上获取光标位置?

MFC如何动态设置当前鼠标位置

如何用delphi编程获取其他程序窗口内的象素颜色信息等?