【发布时间】:2012-02-09 13:40:43
【问题描述】:
我正在开发一个应用程序,该应用程序应从相机设备接收图像并将它们显示在 GTK 窗口中。
相机以不同的帧速率 (1-50 fps) 提供原始 RGB 图像(每像素 3 字节,无 Alpha 通道,固定大小)。
我已经完成了所有硬件方面的工作,现在有了一个回调函数,该函数会在相机捕获的每张新图像中被调用。
在我的窗口中显示这些图像最简单但又足够快的方法是什么?
这是我已经尝试过的:
在 gtk 绘图区域上使用
gdk_draw_rgb_image():基本上可以工作,但渲染速度太慢,以至于绘图过程重叠并且应用程序在前几帧后崩溃,即使在 1 fps 捕获率。为每个新帧分配一个 GdkPixbuf 并在 gtk 图像小部件上调用
gtk_image_set_from_pixbuf():只显示第一帧,然后我看不到任何变化窗户。可能是我的代码中的一个错误,但不知道这是否足够快。使用Cairo(
cairo_set_source_surface(),然后cairo_paint()):看起来很快,但是图像看起来有条纹,不知道图像格式是否兼容。
目前我正在考虑尝试像 gstreamer 之类的东西并将这些图像视为视频流,但我不确定这对于我的简单机制是否有点过头了。
提前感谢您的任何建议!
【问题讨论】:
-
Cairo 以 32 位字定义其 CAIRO_FORMAT_RGB24 图像表面像素,因此在小端机器的内存中,像素将为 BGR0BGR0,您可能正在使用相反的,或者没有放入0 字节,因此剥离。
-
@lynix 我需要编写相同的代码。您能分享如何在 cairo 获取网络摄像头供稿吗?
-
@inckka:从那时起已经 4 年了,你的问题太笼统了,任何人都无法给你一个准确的答案。我的具体问题已经解决this way。
-
@lynix 你在哪里调用 img_update 函数?在 main 里面有一个暴露事件回调?