我正在尝试获取屏幕上像素的颜色,但找不到一种具有可持续刻度率的方法。
所以我尝试的第一个选择是Java中的Robot类-它很容易使用,但仅仅是不够快。
然后,我找到了一种使用this post中的JNA捕获屏幕快照的方法。经过测试并试用了一些代码之后,我发现我几乎能够 得到我想要的东西,主要是通过修改以下行:
GDI32Extra.INSTANCE.BitBlt(hdcMemDC, 0, 0, width, height, hdcWindow, 0, 0, WinGDIExtra.SRCCOPY);
唯一的问题是,在选择所需的单个像素之前,它仍会捕获整个窗口,而且看起来似乎不正确。这会使跳动速度大大降低。
有什么方法可以只捕获一个像素,还是我必须总是先捕获整个窗口?
我对JNA的库缺乏经验,所以也许我只是缺少一些简单的东西。如果有人能指出我正确的方向,那将不胜感激。
谢谢。
答案 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
。