gpt4 book ai didi

c - Xlib:使用 PIxmap 和 XDrawPoint 显示网络摄像头太慢了……我该如何改进?

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:37 24 4
gpt4 key购买 nike

我想打开网络摄像头并使用 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, ....);

但是,调用 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);
  • 使用 ZPixmap 格式创建 XImage
  • 在 XImage 中绘制(在我的例子中使用 XPutPixel)
  • 将 XImage 复制到窗口(使用 XPutImage)

我认为使用 XYPixmap 太慢了,因为 X 需要进行某种转换,从而使过程非常缓慢

关于c - Xlib:使用 PIxmap 和 XDrawPoint 显示网络摄像头太慢了……我该如何改进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15853264/

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