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

时间:2019-03-22 18:00:58

标签: java screenshot jna awtrobot

我正在尝试获取屏幕上像素的颜色,但找不到一种具有可持续刻度率的方法。

所以我尝试的第一个选择是Java中的Robot类-它很容易使用,但仅仅是不够快。

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

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

唯一的问题是,在选择所需的单个像素之前,它仍会捕获整个窗口,而且看起来似乎不正确。这会使跳动速度大大降低。

有什么方法可以只捕获一个像素,还是我必须总是先捕获整个窗口?

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

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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类快,但是它确实回答了您的问题:“如何使用JNA获得单个像素的颜色。”

您将必须解析COLORREF格式的DWORD(32位int)返回值:0x00bbggrr