[英]Xlib: Showing the webcam using PIxmap and XDrawPoint is too slow… how can I improve?
我想打開攝像頭並使用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);
我認為使用XYPixmap太慢了,因為X需要進行某種轉換,從而使過程非常緩慢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.