用于Windows的库“X11 / Xlib.h”,“X11 / Xutil.h”,“unistd.h”

时间:2017-03-03 20:20:39

标签: c windows visual-studio xlib unistd.h

我做了一个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中运行?

2 个答案:

答案 0 :(得分:2)

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

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

至于unistd.h(以及time.h),我在程序中看不到任何依赖它的内容。如果您不打算重写该程序,只需删除有问题的#include语句即可解决问题的这一部分。

答案 1 :(得分:1)

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

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

要使用该功能,您必须链接到在User32.dll

中实现的User32.lib

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

Windows相关图形/图像编程的其他起点:
capturing an image
Create your own Snipping tool