关于Bitblt的效率问题(200分)

  • 主题发起人 主题发起人 蓝色鸽子
  • 开始时间 开始时间

蓝色鸽子

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个类似于Readbook的程序,关于屏幕平滑滚动所采用
的技术是 在内存作图,每次平移一个象素,然后用Bitblt到屏幕上,

但我发现一个致命的问题,就是效率滚动速度不如ReadBook快,我查
了一下,一个Bitblt所用的时间居然用到了30-150毫秒之间(与屏幕
分辨率与色彩和字体有关)而且奇怪的是在2000下效率比在98下还低,

哪位高手能帮我解决,或者有更好的方案!在下不胜感激!
 
用DirectX吧,
ReadBook用了DirectX的。
 
为什么要用BITBLT呢?
既然是滚屏,你直接编程移动坐标就可以的,
何必BITBLT呢?
 
BitBlt最简单,也是最慢的。

http://asp.6to23.com/iseesoft/devdoc/imgdoc/drawdib.htm
 
To: zhhc
ReadBook可以不用DirectX,我把DDraw.dll删掉了,Readbook也不会出错
To:卷起千堆雪tyn:
你说移动坐标是不是用SetWindowOrg系列函数,能不能给点提示
 
ReadBook不用DirectX的时候,速度还是比你的快很多吗?
 
现在问你,是否是滚屏的问题?
如果是,我帮你解决。
 
To:DragonPC_???,
DrawDib函数族效率很高吗?
 
To:zhhc
ReadBook再最高滚屏下速度比我得快一1倍左右

To:卷起千堆雪tyn
滚屏不是问题,主要是滚屏的最高速度的问题
 
我用的是发送WM_VSCROLL这个消息来滚屏的
不过只能用mouse来实现 不能用mouse来控制速度
 
To:卷起千堆雪tyn
能给出更好的解决办法吗?我用softice跟踪了readbook,他的原理其实和我的一样,
不过他用的是ExtTextOut来输出文字,而且是一小段一小段的输出,比如
先输出"This is a Test,",然后再输出"his is a Test, ",奇怪,速度还比我的快,奇怪,
 
To antic_ant,:
你发送WM_VSCROLL,最终还是要调用窗口的重画函数的,主要还是窗口重画函数的效率问题
 
你如果要提高滚屏速度,可以尝试一次平移多个像素,只要人眼察觉不出有跳跃感就行了
 
To zhhc:
这样不行,会牺牲质量的
 
试过吗?你看得出来有跳跃感吗?
 
我觉得还是用bitblt好
我用这个做了个东西挺好的。但是速度慢的时候就不行,跳跃明显。
 
为什么卷兄不往下说了呢?
 
仁兄:
我也在做字幕滚屏的程序,我们有必要探讨一下!我的QQ:124873293
加我时注明:Delphi
 
ScrollWindow, ScrollWindowEx(Handle, FOld.x - FOrigin.x,
FOld.y - FOrigin.y, @R, @R, FUpdateRgn, nil, SW_INVALIDATE);
然后再WMPaint的时候,用BitBlt将在MemBmp画好的贴到刷新区域
我一个程序这么做的,滚动可以跟的上鼠标移动,5M的JPG
 
后退
顶部