有一个办法,一次读入3x3屏幕大小(宽度从-1x屏宽到1x屏宽,高度同理)的范围,这样在任何一次的鼠标拖动中都不会出现需要读盘的情况,然后在客户松开鼠标的时候,再立刻以当前屏幕为中心读入3x3屏幕大小的图像来为下一次的拖动做准备。
可惜的是这个办法只对鼠标拖动有效,对于按住键盘不放的拖动就只能在边界处暂停来读取下一幅面的图像了。不过这样造成的停顿应该不会太明显。
当初我用这个办法来做大量函数图像绘制的缓冲(以减低重绘次数),不过后来还是因为函数有可能变化而且实现起来有点复杂而中途放弃了。不过我想对于静态的图像数据这也不失为一个好办法。
可惜的是这个办法只对鼠标拖动有效,对于按住键盘不放的拖动就只能在边界处暂停来读取下一幅面的图像了。不过这样造成的停顿应该不会太明显。
当初我用这个办法来做大量函数图像绘制的缓冲(以减低重绘次数),不过后来还是因为函数有可能变化而且实现起来有点复杂而中途放弃了。不过我想对于静态的图像数据这也不失为一个好办法。
对每一个OnKeyPress事件都读入一小段的图像数据(而不是一屏)跟原来的数据拼起来。虽然滚动的速度降低了(但是应该不会降低多少,因为读入的数据并不多),但是这样至少能做到“匀速”滚动了。
你只要为你的图形文件创建一个映射,就可以把它当做已经被全部载入内存了。
不要小看Win32操作系统,windows的内存管理就是用页交换的机制,它自然会为你把要用到的文件读入内存,而把不用的部分放回磁盘的。
相信它,没错的:)
但是根据尺寸来计算的话却应该远远不到内存不足的情况。不明白是怎么回事……