GTK高手帮帮忙,问题解决了再加分

w0911h 2009-07-23 10:30:51
我的项目有一个功能是这样的,在一个绘图区中播放视频,要在画面上的不同位置显示8个矩形,矩形不能影响画面的播放,而且要经常变换颜色(红绿,每个矩形一秒钟可能要变换几次),我现在是这样做的,把播放视频的绘图区放到一个fixed上,然后用8个小绘图区表示矩形,用gdk_draw_rgb_image()将视频帧画到绘图区中实现播放,在矩形需要变色的时候,先用gdk_window_set_background改变颜色,然后调用gdk_window_invalidate_rect()函数重绘窗口实现变色,但是这样有时候程序确实发送了变色消息,但是颜色却没有改变,不知道是什么原因,会不会是实现变色的效率太低,如果是的话那有没有更好的方法去改变一个控件的颜色?
我想在视频绘图区上加一个透明的矩形绘图区,然后用gdk_draw_rectangle函数把所有的矩形都画到那个绘图区上,那样变色只要重绘矩形就行了,不知道这样的效率是不是好点,但是我用gtk_window_set_opacity()方法却不能实现透明,我的GTK版本是2.12.1
...全文
175 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ecsape 2009-07-23
  • 打赏
  • 举报
回复
这俩个函数gdk_window_set_background和gdk_window_invalidate_rect()是在主线程里调用的吗?不是的话,加gdk_threads_enter()和gdk_threads_leave()了吗?
我没用过gdk_window_invalidate_rect()这种方式刷新屏幕,不知道为什么有时刷新颜色有时没刷新。

给你提供个别的方式:
用g_timeout_add 每过一段时间调用:
if (mw->topLevelWindow->window == NULL) return FALSE;
gtk_widget_queue_draw(mw->topLevelWindow);
然后响应“expose-event”,在回调函数里,
gdk_window_set_background
w0911h 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ecsape 的回复:]
如果是我,我就用一个窗口播视频,然后另做8个窗口显示不同颜色的矩形。当然要把这8个窗口挪到你需要的位置。
至于透明,gtk应该是不支持窗口透明的,我一般用抓屏的方式实现透明。不知道你用的播放器是什么,如果是mplayer可以将屏幕画面输出作为背景来实现透明。
[/Quote]
我现在的说法和你说的一样,但是矩形改变颜色有时候看不出来
我不用别的播放器,自己的程序将视频采集卡采集到的画面播放出来
ecsape 2009-07-23
  • 打赏
  • 举报
回复
如果是我,我就用一个窗口播视频,然后另做8个窗口显示不同颜色的矩形。当然要把这8个窗口挪到你需要的位置。
至于透明,gtk应该是不支持窗口透明的,我一般用抓屏的方式实现透明。不知道你用的播放器是什么,如果是mplayer可以将屏幕画面输出作为背景来实现透明。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧