L
loveno
Unregistered / Unconfirmed
GUEST, unregistred user!
关于字幕连续滚动播放的问题(头疼死了)
本人欲实现字幕的连续滚动播放,即将给定的一片文档实现字幕滚动播出,播出的字体和行高可以灵活设置。本人利用的是DelphiX构件。
实现的主要思路是:1。DXtimer构件+DXDraw,将播放文档的每一行进行实时图片化处理,即在滚动播出一行后,将文档中下一行的文字读入内存,进行图片化和镜像处理。播出效果在Geforce4的显卡中效果非常好,但是Geforce2或者其他低端显卡,会出现停顿的感觉。分析:因为在播出过程中的速度是均匀的,但是一到换行处,由于需要进行上述计算,占用主线程的CPU时间,所以使播出出现停顿。本人欲采用多线程来解决,效果还是不行,理由:多线程还是会占用主线程的CPU执行,降低均匀的播出速度,因为正常播出时已经是耗CPU100%。
2。采用预读的方式。即将整篇文档全部每行图片镜像化,并存入内存。本人采用的是动态Fsurface数组的方式。分析:当文档量不是很大,效果能够满足各种显卡,因为本方式已经将所有的分行图像镜像工作预先做玩,所以没有了播出过程中的换行耗CPU 的问题。但是当文档较多时,例如文档可能有几万字的时候,内存会成为瓶颈,即使利用虚拟内存,效果大塔折扣,这是因为硬盘的参与降低了整体效果。
本人还是倾向于第一种方案,因为实时处理毕竟使内存的瓶颈消除,但是如何使换行时的停顿感消失成为难点所在,这实际上就是如何保持播出不受影响的问题。哪位大侠愿意赐教,本人将所有的分数(虽然不多)奉上,因为从此之后,本人将彻底放弃编程,很难过的一件事情,但是没有办法,谢谢诸位。
本人欲实现字幕的连续滚动播放,即将给定的一片文档实现字幕滚动播出,播出的字体和行高可以灵活设置。本人利用的是DelphiX构件。
实现的主要思路是:1。DXtimer构件+DXDraw,将播放文档的每一行进行实时图片化处理,即在滚动播出一行后,将文档中下一行的文字读入内存,进行图片化和镜像处理。播出效果在Geforce4的显卡中效果非常好,但是Geforce2或者其他低端显卡,会出现停顿的感觉。分析:因为在播出过程中的速度是均匀的,但是一到换行处,由于需要进行上述计算,占用主线程的CPU时间,所以使播出出现停顿。本人欲采用多线程来解决,效果还是不行,理由:多线程还是会占用主线程的CPU执行,降低均匀的播出速度,因为正常播出时已经是耗CPU100%。
2。采用预读的方式。即将整篇文档全部每行图片镜像化,并存入内存。本人采用的是动态Fsurface数组的方式。分析:当文档量不是很大,效果能够满足各种显卡,因为本方式已经将所有的分行图像镜像工作预先做玩,所以没有了播出过程中的换行耗CPU 的问题。但是当文档较多时,例如文档可能有几万字的时候,内存会成为瓶颈,即使利用虚拟内存,效果大塔折扣,这是因为硬盘的参与降低了整体效果。
本人还是倾向于第一种方案,因为实时处理毕竟使内存的瓶颈消除,但是如何使换行时的停顿感消失成为难点所在,这实际上就是如何保持播出不受影响的问题。哪位大侠愿意赐教,本人将所有的分数(虽然不多)奉上,因为从此之后,本人将彻底放弃编程,很难过的一件事情,但是没有办法,谢谢诸位。