使用JNA获取单个像素的颜色

Get the colour of a single pixel using JNA

我正在尝试获取屏幕上某个像素的颜色,但找不到具有可持续滴答率的方法。

所以我尝试的第一个选项是 Java 中的机器人 class - 它使用起来很简单,但速度不够快。

然后我找到了一种使用 this post 中的 JNA 捕获屏幕截图的方法。在对代码进行了一些测试和尝试之后,我发现我能够 几乎 得到我想要的东西,主要是通过修改以下行:

GDI32Extra.INSTANCE.BitBlt(hdcMemDC, 0, 0, width, height, hdcWindow, 0, 0, WinGDIExtra.SRCCOPY);

唯一的问题是它在挑选出您想要的单个像素之前仍然会捕获整个 window,这似乎不对。这会大大降低滴答速度。

有什么方法可以让我只捕捉一个像素,还是我必须总是先捕捉整个 window?

我对 JNA 的库非常缺乏经验,所以也许我只是遗漏了一些简单的东西。如果有人能指出我正确的方向,将不胜感激。

谢谢。

尝试将 GetPixel 函数添加到您自己的 JNA class。

public interface MyGDI32 extends com.sun.jna.platform.win32.GDI32 {
    MyGDI32 INSTANCE = Native.load("gdi32", MyGDI32.class, W32APIOptions.DEFAULT_OPTIONS);

    int GetPixel(HDC hdc, int x, int y);
}

然后用MyGDI32.INSTANCE.GetPixel()调用它。

我不能保证它会比 Robot class 快多少,但它确实回答了你如何 "Get the colour of a single pixel using JNA."

的问题

您必须解析 DWORD(32 位整数)return 值,其格式为 COLORREF0x00bbggrr