我开始时使用attach("路径%d")按路径名称的循环(CDoc中的函数)完成加载,然后处理,显示(CImg.draw(pDC)函数)。但延迟很严重。
现在考虑如何将多幅bmp图像(路径已知,图像大小已知,8bit bmp图,并且不超过10幅)依次存入内存,然后依次在VIew菜单里显示出来(使用CImg.draw(pDC),不建立对话框),这样延迟应该会很小了。
对于如何存储及显示,请高手指教详细点的代码,先谢过了。

解决方案 »

  1.   


    这还不容易?、
    方法1:用一个字符串List 来存储你所有需要读取来显示的那些bmp文件完整路径名,然后,在定时器那里,根据你的时间间隔来从这个字符串List里的路径读取进内存再显示。方法2:在程序运行后,先一次性,把所有bmp位图文件的数据都读取到一个内存数组中存储,可以用BYTE pImg[width*height*n] 来存储,其中width、height分别是8位bmp的宽和高,n是你总共需要处理的bmp文件数。当然,这个数组只能存储8位bmp位图的像素数据,
    至于位图文件头和位图信息头以及位图的颜色索引表,你需要另外存储,因为都是一样的8位bmp图片,这3部分只要存储一次就可以了。
      

  2.   

    对于方法一,我没有设置时间间隔时,for(第一幅,最后一幅,++){按路径加载,处理,显示}都延迟很严重(没有加处理算法时显示很快的),字符串List和用for循环加载应该一样吧?(我是VC++新手)。至于第二种方法和我想的一样,只是能给相对详细点的关键代码不?(比如如何写入内存,使用哪些API显示)谢谢二楼高手说的用一个数组的话,我处理算法中的很多地方要用到图像边界范围循环,而且有多种变化,所以改起来会很麻烦。三楼说的多线程,我更是没有使用过,所以还是请高手指点指点简单点的,一次性读入内存,然后顺序显示的方法吧
      

  3.   

    方法二可以使用动态数组啊,new一个数组不就OK了?
      

  4.   


    这个延迟,没办法,是由于你的算法造成的而不是读取文件时造成的。你也知道,不用你的算法时很快的啊。第二种方法,我以前做个一个,就是定时显示某个目录下N张bmp图片中的n个的小程序。也就是,比如,某个目录下有200幅图像,我在定时器里定时显示其中的50幅图像,这50幅图像是随机抽取的。
    不知道这个是否符合你的要求。不过是用MFC来实现的,如果对你有用,我可以发给你参考下。
      

  5.   

    我说的数组是CImg数组
    你读一个图片就是一个CImg
    你读十个图片就是CImg[10]
    至于你怎么处理每一副图片和这个有关系么
      

  6.   

    xxx.hclass BMPIO: public CObject
    {
    DECLARE_SERIAL(BMPIO)
    }; //存单辐图像那些事情,public CObject必须,否则下面通不过
    xxx.cpp
    IMPLEMENT_SERIAL( BMPIO, CObject, 1 )CTypedPtrArray < CObArray, BMPIO* > m_DataArray;BMPIO * tmp = new BMPIO ;
    m_DataArray.add(tmp);....注意以上红的必须存在,不能忽略
      

  7.   

    在论坛上逛逛才发现,原来我和各位高手的差距原来这么大啊-。-....
    TandyT,邮箱已经发给你了,把代码发给俺学习学习哈,拜谢!~~~
      

  8.   

    收到,谢谢!
    顺便说一句,同时出你头像上的四大神器,看不出你用的哪个hero 哈哈