C Xlib:使用PIxmap和XDrawPoint显示网络摄像头太慢。。。我怎样才能提高?

C Xlib:使用PIxmap和XDrawPoint显示网络摄像头太慢。。。我怎样才能提高?,c,xlib,C,Xlib,我想打开网络摄像头,用Xlib播放视频。 因此,我打开网络摄像头,获取图像,然后做如下操作: for(x = 0; x < webcamX; x++){ for(y = 0; y < webcamY; y++){ pixel = GetCameraPixel(x, y); XDrawPoint(dpy, pixmap, pixel, x, y); } } XCopyArea(dpy, pixmal, window, ....); (x

我想打开网络摄像头,用Xlib播放视频。 因此,我打开网络摄像头,获取图像,然后做如下操作:

for(x = 0; x < webcamX; x++){
    for(y = 0; y < webcamY; y++){
        pixel = GetCameraPixel(x, y);
        XDrawPoint(dpy, pixmap, pixel, x, y);
    }
}
XCopyArea(dpy, pixmal, window, ....);
(x=0;x{ 对于(y=0;y 但是,调用XDrawPoint太慢了。 我也尝试过使用XImage,但这次XPutPixel和XPutImage都变慢了(使用Pixmap比XImage快)

我认为问题在于,执行XDrawPoint 640*480次会向X服务器发出大量请求。同样,在执行XPutImage时,发送640*480图像也是一件非常麻烦的事情。。不是吗

所以,忘了网络摄像头,想象一下,我只想用XLib做一个游戏、一个动画、一个视频播放器,或者别的什么。。可能吗?我确信逐像素绘制是没有效率的,那么我如何才能做好呢? 我在互联网上找到的所有信息都是使用Pixmap或XImage,这比在窗口上画画要好,但还不够

例如,xscreensavers在全屏显示了一个非常好的动画(我认为他们只使用Xlib),他们如何使动画流畅


谢谢。

嗯,我想是我的错。 使用XImage是最好的方法,它在逐像素绘制(如网络摄像头示例)时非常快速和平滑。 但是,我正在使用XYPixmap创建XImage,它太慢了,我改为ZPixmap,一切都很完美

因此,我用于网络摄像头的解决方案是:

image = XCreateImage(dpy, DefaultVisual(dpy, DefaultScreen(dpy)), DefaultDepth(dpy, DefaultScreen(dpy)), ZPixmap, 0, imagedata, webcamX, webcamY, 32, 0);
/* ....*/
for(x = 0; x < webcamX; x++){
    for(y = 0; y < webcamY; y++){
        pixel = GetCameraPixel(x, y);
        XPutPixel(image, x, y, pixel);
    }
}
XPutImage(dpy, window, gc, image, 0, 0, 0, 0, webcamX, webcamY);
image=XCreateImage(dpy,DefaultVisual(dpy,DefaultScreen(dpy)),DefaultDepth(dpy,DefaultScreen(dpy)),ZPixmap,0,imagedata,webcam,32,0);
/* ....*/
对于(x=0;x
  • 使用ZPixmap格式创建XImage
  • 绘制该XImage(在我的示例中使用XPutPixel)
  • 将XImage复制到窗口(使用XPutImage)
我认为使用XYPixmap太慢了,因为X需要进行某种转换,从而使过程非常慢