簡體   English   中英

Xlib:使用PIxmap和XDrawPoint顯示網絡攝像頭太慢了……我該如何改進?

[英]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);
  • 使用ZPixmap格式創建XImage
  • 繪制該XImage(在我的情況下使用XPutPixel)
  • 將XImage復制到窗口(使用XPutImage)

我認為使用XYPixmap太慢了,因為X需要進行某種轉換,從而使過程非常緩慢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM