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