gpt4 book ai didi

c - 使用 openGL 和/或 X11 的截图

转载 作者:太空狗 更新时间:2023-10-29 17:01:38 25 4
gpt4 key购买 nike

我正在尝试获取屏幕或窗口的屏幕截图。我尝试使用 X11 中的函数它工作正常。问题是从 XImage 获取像素需要花费大量时间。比我试图寻找一些关于如何使用 openGL 做到这一点的答案。这是我得到的:

#include <stdlib.h>
#include <stdio.h>
#include <cstdio>
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glx.h>
#include <X11/Xlib.h>


int main(int argc, char **argv)
{

int width=1200;
int height=800;
//_____________________________----
Display *dpy;
Window root;
GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
XVisualInfo *vi;
GLXContext glc;

dpy = XOpenDisplay(NULL);

if ( !dpy ) {
printf("\n\tcannot connect to X server\n\n");
exit(0);
}

root = DefaultRootWindow(dpy);
vi = glXChooseVisual(dpy, 0, att);

if (!vi) {
printf("\n\tno appropriate visual found\n\n");
exit(0);
}

glXMakeCurrent(dpy, root, glc);
glc = glXCreateContext(dpy, vi, NULL, GL_TRUE);


printf("vendor: %s\n", (const char*)glGetString(GL_VENDOR));

//____________________________________________
glXMakeCurrent(dpy, root, glc);

glEnable(GL_DEPTH_TEST);
GLubyte* pixelBuffer = new GLubyte[sizeof(GLubyte)*width*height*3*3];

glReadBuffer(GL_FRONT);

GLint ReadBuffer;
glGetIntegerv(GL_READ_BUFFER,&ReadBuffer);
glPixelStorei(GL_READ_BUFFER,GL_RGB);

GLint PackAlignment;
glGetIntegerv(GL_PACK_ALIGNMENT,&PackAlignment);
glPixelStorei(GL_PACK_ALIGNMENT,1);

glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_INT, pixelBuffer);

int i;

for (i=0;i<100;i++) printf("%u\n",((unsigned int *)pixelBuffer)[i]);



return 0;
}

当我运行程序时,它返回一个错误: X 请求失败错误:BadAccess(尝试访问私有(private)资源被拒绝) 失败请求的主要操作码:199 () 失败请求的次要操作码:26 失败请求序号:20 输出流中的当前序列号:20

如果我用 glXMakeCurrent(dpy, root, glc); 注释行;在 glc = glXCreateContext(dpy, vi, NULL, GL_TRUE) 之前;它没有返回任何错误,但所有像素都为 0。

我该如何解决这个问题?我是 openGL 的新手,也许我在这里遗漏了一些重要的东西。也许还有另一种从屏幕或特定窗口获取像素的方法?

最佳答案

我认为您尝试做的事情是不可能的。您不能使用 OpenGL 从您不拥有的窗口读取像素,这些窗口甚至可能不使用 OpenGL。您需要坚持使用 X11。

如果您有 XImage,您可以从 ximage->data 获取原始像素。只需确保您阅读的格式正确即可。

http://tronche.com/gui/x/xlib/graphics/images.html

关于c - 使用 openGL 和/或 X11 的截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com