有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用JNA获得单个像素的颜色

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

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

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

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

唯一的问题是,在挑选出你想要的单个像素之前,它仍然会捕获整个窗口,而这似乎并不正确。这会大大降低滴答声的频率

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

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

谢谢


共 (1) 个答案

  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)返回值,其格式为^{}0x00bbggrr