gtk有更快的图像刷新方法吗

发布于 2022-07-26 07:01:01 字数 262 浏览 14 评论 9

我用gtk来实现了一个图片的过渡效果,每一帧画面处理完后调用gtk_widget_queue_draw_area来引发expose_event事件,然后在expose_event事件的回调函数中绘制图像,在pc上效果还可以接收,可是在嵌入式机器里面反应巨慢,我测试了一下,在我引发信号到进入到expose_event回调函数里要几百毫秒的时间,这显然是太慢了(希望能在10毫秒以内),gtk的机制如此没办法,不知道除了这样做还没有更实时的绘制方法,即我每帧的画面处理完后能立即显示出来,知道的朋友还望不吝赐教,小弟感激不尽!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

我不吻晚风 2022-08-04 09:24:43

GTK机制如此,导致各种方法都不能有效加速画面的刷新速度,我现在的做法是在gdk-directfb层面增加一个接口,重新编译库,使我在gtk程序中可以调用该接口取得gdk的图像渲染所使用的dfb的surface,然后我在动画效果时的代码实际上是一段dfb程序,将图像直接渲染到该surface上,跳过了gdk的那些东东,我试了一下初步取得成功,并且不影响gtk窗口的事件处理,全屏从上到下依次画隔行直线速度还不错,继续改进一下看看图片显示速度怎么样,我弄成功的话将方法写出来大家一起讨论讨论。

猫性小仙女 2022-08-04 08:55:38

考虑下gtk_widget_send_expose直接进入重绘

榆西 2022-08-04 07:52:22

解决了吗?我最近也需要做这些,解决后希望告知一声

忆梦 2022-08-04 04:45:37

又测试了一下,我原来在expose-event回调函数里面用gdk_draw_pixbuf()画的,现在直接在每一帧处理完了调用它也可以画出来的,和gdk_draw_rgb_image()效果一样,现在的问题是在pc上这两个函数调用都可以刷新画面,可是在gtk+dfb构架的嵌入式机器上就都画不出来,除非每一帧处理完设置无效区域,然后在expose-event回调函数中调他们,难道gtk+dfb的构架就只能在expose-event的回调函数中来画图吗

生活了然无味 2022-08-04 01:02:05

我试了一下,你说的的确是可以的,我调用gdk_draw_rgb_image()后是可以立即画出来,不过是在pc上,我pc的gtk是2.10,但是嵌入式中画不出来,可能gtk+dfb中没有支持到这个函数,郁闷了

〃温暖了心ぐ 2022-08-03 09:30:36

SORRY,确实打错了,是gdk_draw_rgb_image

初见你 2022-08-03 03:11:53

多谢二楼的回复!按你的意思那就是调用gtk_window_draw_rgb()就立即可以显示了吗,不需要等到触发expose_event事件到了就行了,如果这样的话就好办了,我每帧处理完直接调它就行了,不用设置无效区了,那就真是太理想了,不过你这函数根本就不存在还是你打错了呀,但我看到的一些代码都是要设置无效区的

===》三楼:我的就是gtk+dfb的,感觉移植后控件和内存都耗的巨大,可能优化的不够,现在速度和内存占用都不理想

不必在意 2022-08-02 13:54:27

你的平台是GTKFB吗,移植方便吗?移植完成后需要多大空间?

并安 2022-07-31 03:00:04

直接用个线程不就可以了,搞个信号量,然后让这个线程等待信号量,图片处理的时候会占用信号量,而绘制线程就等待信号量,取得信号量后直接gtk_window_draw_rgb就可以了。
draw图片的时候要前后加上 gdk_threads_enter(),gdk_threads_leave()

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文