有一个办法,一次读入3x3屏幕大小(宽度从-1x屏宽到1x屏宽,高度同理)的范围,这样在任何一次的鼠标拖动中都不会出现需要读盘的情况,然后在客户松开鼠标的时候,再立刻以当前屏幕为中心读入3x3屏幕大小的图像来为下一次的拖动做准备。
可惜的是这个办法只对鼠标拖动有效,对于按住键盘不放的拖动就只能在边界处暂停来读取下一幅面的图像了。不过这样造成的停顿应该不会太明显。
当初我用这个办法来做大量函数图像绘制的缓冲(以减低重绘次数),不过后来还是因为函数有可能变化而且实现起来有点复杂而中途放弃了。不过我想对于静态的图像数据这也不失为一个好办法。

解决方案 »

  1.   

    你可以这样:
    对每一个OnKeyPress事件都读入一小段的图像数据(而不是一屏)跟原来的数据拼起来。虽然滚动的速度降低了(但是应该不会降低多少,因为读入的数据并不多),但是这样至少能做到“匀速”滚动了。
      

  2.   

    由于是未知图形格式,采用DLL提供的函数调用,很难适当的调出非屏幕形状的图象
      

  3.   

    只剩下最后一个办法了:事先将图像全部读出另存为已知格式(如果硬盘够大的话就直接存成RGB的顺序文件算了),然后进行上述操作。要是再不行的话我也没辙了。
      

  4.   

    我已经受不了了,屏幕设为1024*768后,3x3屏幕都内存不足,图形分若干文件,总共有2G,我在图形论坛有人叫我查CreateFileMapping,我仍不清楚,有无高人给个Demo
      

  5.   

    to leady:你的图像浏览器支持哪几种格式??
      

  6.   

    我采用DLL提供的函数调用图象文件在屏幕上显示
      

  7.   

    用CreateFileMapping没错,文件映射的效率由操作系统保证,
    你只要为你的图形文件创建一个映射,就可以把它当做已经被全部载入内存了。
      

  8.   

    哪里有demo,MSDN上有吗?适合于我这种由专门提供的动态库调用专门格式的图形文件的情况吗?(需提供一个DC的Handle)
      

  9.   

    但是Mapping了以后,系统还是要读硬盘的吧,而且图片这么大,内存这么小(3*3就不妥了),读进来的东西也没有办法放到缓存里……关注!
      

  10.   

    to cybercake(数字蛋糕) 
    不要小看Win32操作系统,windows的内存管理就是用页交换的机制,它自然会为你把要用到的文件读入内存,而把不用的部分放回磁盘的。
    相信它,没错的:)
      

  11.   

    我以前曾经用TBitmap显示一张很大的图片,但是在创建的时候出错。也许是Bitmap太大了。
    但是根据尺寸来计算的话却应该远远不到内存不足的情况。不明白是怎么回事……