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

问题描述 投票:2回答:1

我试图获得屏幕上像素的颜色,但我找不到具有可持续滴答率的方法。

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

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

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

唯一的问题是它在选择你想要的单个像素之前仍然捕获整个窗口,它似乎不正确。这会大大降低滴答速度。

有什么方法可以捕获一个像素,还是我被迫总是首先捕获整个窗口?

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

谢谢。

java screenshot jna awtrobot
1个回答
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获取单个像素的颜色”的问题。

你将不得不解析DWORD(32位int)返回值,该值以COLORREF格式:0x00bbggrr

© www.soinside.com 2019 - 2024. All rights reserved.