0

我已经完成了一个 C 程序,它获取屏幕像素的 RGB 值(0-255),知道它的位置(x,y)。它适用于 Linux,但是当我尝试在 Visual Studio (Windows) 中编译它时,由于库 X11/Xlib.h、X11/Xutil.h、unistd.h 不存在而崩溃。

这是代码:

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>

void getimage(XColor c, Display* d, int* rgb, int x, int y) {
    XImage* image;
    image = XGetImage(d, RootWindow(d, DefaultScreen(d)),
        x, y, 1, 1, AllPlanes, XYPixmap);
    c.pixel = XGetPixel(image, 0, 0);
    XFree(image);
    XQueryColor(d, DefaultColormap(d, DefaultScreen(d)), &c);
    rgb[0] = c.red / 256;
    rgb[1] = c.green / 256;
    rgb[2] = c.blue / 256;
}

int main () {
    int rgb[3], x, y;
    XColor c;
    Display* d = XOpenDisplay((char*)NULL);
    getimage(c, d, rgb, x, y);
}

如何实现它以在 Windows 中运行?

4

2 回答 2

3

您已经编写了一个 X11 程序。X 是 OS X 以外的类 UNIX 系统上图形显示的共识标准(但它也可免费用于 OS X)。

Windows 使用完全不同的图形显示 API。可以想象,您可以找到在 Windows 上运行的 X 实现,但微软当然不提供。由于您的程序很短,最好的办法可能是使用 Windows API重写它。

至于unistd.h(和time.h),我在您的程序中看不到任何依赖它的东西。如果你不打算重写程序,你可以通过删除有问题的#include语句来解决你的那部分问题。

于 2017-03-03T20:44:32.553 回答
1

您问题答案的一小部分可能是搜索 MSDN。那里描述了以下功能:(下面的链接)

#include <Windows.h>  
...
DWORD WINAPI GetSysColor(
  _In_ int nIndex
);

要使用该功能,您必须链接到在 User32.dll 中实现的 User32.lib

等的描述GetSysColor(...)。人。可在此处访问。此功能是支持类似功能的众多功能之一,但警告,使用方法将像完全不同的语言。Windows 编程很少类似于 Linux 编程。

Windows 相关图形/图像编程的其他起点:
捕获图像
创建自己的截图工具

于 2017-03-03T20:27:33.413 回答