项目要求在0.03毫秒的时间内向客户区指定位置由上向下输出一串文本,我直接用这两个函数,达不到要求,项目要交了,急呀,请各位大侠帮帮忙:),分不是问题

解决方案 »

  1.   

    to jyc_nj(老蔣):
    文字的内容是可以知道的,我主要是想在等待显示器场同步的时间内将文本显示出来,防止字幕在快速滚动时的闪烁,但我发现TextOut()和DrawOut()的效率达不到要求,所以请教更好的写屏方法,真的有点急,知道的请赐教,和我一样有疑惑的劳烦帮忙顶一下,先谢了!!
      

  2.   

    不明白,0.03毫秒还是0.03秒,就是说你的显示要一秒钟3万帧的刷新,别说肉眼看不见,就连显示器也更本达不到。其实如果内容不是太多的话textout的速度应该可以达到,这只不过在内存中该机是个点的颜色值。可不可以把你的问题描述具体一点
      

  3.   

    是 0.03毫秒,因为一般显示器的场消隐时间小于0.1毫秒的,我的意思就是在场消隐时间内,将我要输出的内容输出,就可以完全地避免闪烁:),可是用TextOut输出时,测试的结
    果时间大于场消隐时间,在字幕快速移动时产生闪烁。场消隐时间和显示刷新不是一个概念
    的。还请各位老大出手指条路。
      

  4.   

    如果内容预先知道,你先写入缓存DC,再拷贝到屏幕上内存拷贝时间,不知道有没有达到这个要求还有就是使用DirectX 来实现,速度更快,但是恐怕也要用缓冲技术才行
      

  5.   

    内存拷贝的时间
    在我的机器上
    1024*768
    PIV 2.4 512M 80G上
    大约要0.6ms但却是可以解决闪烁
      

  6.   

    如果内容是已知的话,那用内存DC是非常快的,你可以在任何时间快速的BilBit指屏幕的任意位置,而且绝对不会产生闪烁。特别是文字区域小时,选择拷贝区域,更是非常快的。
      

  7.   

    你可以将文字事先TextOut至内存DC中,在特定的时间传送被显示文字所在的区域,这样几乎是瞬时的。达到你这样的要求绝对没问题
      

  8.   

    把文字变为bitmap(BMP),然后使用DrawDibDraw,恐怕除了DirectX外,就Vfw(Vedio for windows)最快了,就是DrawDibDraw等系列函数。
      

  9.   

    to all:
         谢谢各位出手相帮:)to  wgstar(边缘独行)  vocanicy(刺客) tgame(从此醉) shines(郭子) :
         内容我是程序一开始运行时就从库中取出的,这样也算是内容已知吧,我也是先将他TextOut到内存DC中,然后BltBit的,这样做在输出一行字幕时没什么问题,但两路同时输出时,如果有一路在显示器的上部,就会有明显的闪烁,所以我估计还是效率问题,另外,因为我要产生平滑的字幕移动,每次的位移很小,所以我要快速的移动必须要增加重绘的次数,这样也给系统造成的负担,但我没有试DirectDraw,所以我不知道用它有多大的改观,希望熟悉DirectDraw的大侠跟我说说。
    to Wyhshp(阿呆) :
        我很难要求我的用户的机器有和你一样配置的:(
      

  10.   

    我的显示器在 640*480 60Hz 下CRT的Vertical sync width是0.064msec
      

  11.   

    内容已知的话,就将内容预先全绘制到一个CompatibleBitmap,然后按照所需,使用显示特效来BitBlt..达到骗人的效果 ^_^
      

  12.   

    to  lambochan(打杂):
        用你的方法也不能说是骗人,因为他确实能达到某种效果(用户可不管你用什么技术,他们要的是结果,呵呵),但这种方法解决不了我的问题,我需要效率上解决,因为项目还有其他的需求要我必须这么做:(
      

  13.   

    双缓冲:先在内存(显存)中画好,然后等到场消隐时送到显示器
    DirectX就是这样做的
    更别说GDI比DirectX慢了
      

  14.   

    TextOut()DrawText()用的是轮廓字体
    需要计算贝耳赛曲线的轨迹,很消耗CPU的
    试一试用点整字体
      

  15.   

    DrawText恐怕很难达到你的要求,你还是试着 用DirectX吧
      

  16.   

    1.将你的dc拷贝到你的内存dc中。
    2.将你想要的TextOut()的内容输出到内存dc中。
    3.再用dc.BitBlt()将内存dc拷出,就行了。
      

  17.   

    回复人: zyl910(910:分儿,我又来了!) ( ) 信誉:105  2003-12-28 10:27:00  得分:0 
     
     
      TextOut()DrawText()用的是轮廓字体
    需要计算贝耳赛曲线的轨迹,很消耗CPU的
    试一试用点整字体
      
     
    这个方法可以试试,应该可以提高不少