首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Xlib中提取Pixmap

从Xlib中提取Pixmap
EN

Stack Overflow用户
提问于 2013-11-11 18:02:33
回答 1查看 3.5K关注 0票数 2

我一直试图从X窗口直接抓取视频,并指向Xlib和复合扩展。

到目前为止,我已经能够侦听更改事件并使用以下代码获取Pixmap:

代码语言:javascript
复制
#include <X11/Intrinsic.h>
#include <X11/extensions/Xcomposite.h>
#include <X11/extensions/Xdamage.h>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char ** argv) {
    int br, base;
    Window win = 0x3400003;
    Display *dsp = XOpenDisplay(0);
    XCompositeQueryExtension(dsp, &base, &br);
    XDamageQueryExtension(dsp,&base, &br);


    cout << base << endl;

    Damage damage = XDamageCreate(dsp, win, XDamageReportRawRectangles);
    XCompositeRedirectWindow(dsp, win, CompositeRedirectAutomatic);

    XEvent ev;
    while(true) {
        XNextEvent(dsp, &ev);
        if(ev.type == base + XDamageNotify) {
            Pixmap pm = XCompositeNameWindowPixmap(dsp, win);
            XWindowAttributes attr;
            XGetWindowAttributes(dsp, win, &attr);
            XWriteBitmapFile(dsp, "test.bmp", pm, attr.width, attr.height, -1, -1);
            return 0;
        }
    }

    XCompositeUnredirectWindow(dsp, win, CompositeRedirectAutomatic);
    XDamageDestroy(dsp, damage);
    return 0;
}

这里的问题是,由此产生的bmp (由XWriteBitmapFile创建)是黑白可怕的。不管我不想把数据写进文件的事实,我显然是在做一些错误的阅读。我希望将Pixmap转换为opengl中的框架缓冲区或ram中的二进制blob。

谢谢你在这件事上给我的任何帮助。

诚挚的问候。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-11 22:24:40

X世界中的“位图”指的是双色图像。我猜XWriteBitmapFile在内部执行GetImage请求,并将服务器像素映射转换为位图。请注意,文件格式是自己的“X11位图”,而不是windows位图。

如果您确实需要图像的二进制blob,可以使用XGetImage函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19912851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档