关于字幕连续滚动播放的问题(头疼死了)(70分)

  • 主题发起人 主题发起人 loveno
  • 开始时间 开始时间
L

loveno

Unregistered / Unconfirmed
GUEST, unregistred user!
关于字幕连续滚动播放的问题(头疼死了)
本人欲实现字幕的连续滚动播放,即将给定的一片文档实现字幕滚动播出,播出的字体和行高可以灵活设置。本人利用的是DelphiX构件。
实现的主要思路是:1。DXtimer构件+DXDraw,将播放文档的每一行进行实时图片化处理,即在滚动播出一行后,将文档中下一行的文字读入内存,进行图片化和镜像处理。播出效果在Geforce4的显卡中效果非常好,但是Geforce2或者其他低端显卡,会出现停顿的感觉。分析:因为在播出过程中的速度是均匀的,但是一到换行处,由于需要进行上述计算,占用主线程的CPU时间,所以使播出出现停顿。本人欲采用多线程来解决,效果还是不行,理由:多线程还是会占用主线程的CPU执行,降低均匀的播出速度,因为正常播出时已经是耗CPU100%。
2。采用预读的方式。即将整篇文档全部每行图片镜像化,并存入内存。本人采用的是动态Fsurface数组的方式。分析:当文档量不是很大,效果能够满足各种显卡,因为本方式已经将所有的分行图像镜像工作预先做玩,所以没有了播出过程中的换行耗CPU 的问题。但是当文档较多时,例如文档可能有几万字的时候,内存会成为瓶颈,即使利用虚拟内存,效果大塔折扣,这是因为硬盘的参与降低了整体效果。
本人还是倾向于第一种方案,因为实时处理毕竟使内存的瓶颈消除,但是如何使换行时的停顿感消失成为难点所在,这实际上就是如何保持播出不受影响的问题。哪位大侠愿意赐教,本人将所有的分数(虽然不多)奉上,因为从此之后,本人将彻底放弃编程,很难过的一件事情,但是没有办法,谢谢诸位。
 
你的文档全部是文字么?有简单的办法实现!
 
如果只是实现滚动的话,我有一个建议,不妨使用flash制作滚动效果,而后再使用delphi嵌套在其中,效果绝对好的。
 
archonwang,可能那样不行,因为文字是动态的,也就是说软件使用者可以选择任意的Word文档,然后由程序实现文档的镜像播放。实际上这是电视台用的一个播出题词器。用来提示播音员播音用的。
zyy04,是的,我的播稿内容全是文字,请教该如何是好,谢谢了。
 
建议你准备显示两屏的图片, 滚动的同时不断准备后继页面,至少保持一页的缓冲,这样显示反应速度加快了(节约下来的timer可以用来准备后继缓冲页面)
 
可以使用双线程,一个读入文档并处理存入内存,另一个从内存中读出并播,内存块是一个环行队列,存若干幅(行),处理线程如发现队列非满,就读入文档并处理存入内存;播放线程如发现队列非空,就读出进行播放.两个线程对环行队列的访问需进行同步处理
另外,你的线程100%占有CPU,估计是你的线程写的有问题,可在死循环中加上信号量等待,或简单一点Sleep(1)
 
后退
顶部