问题描述
我往CImageList里加入了8万多个图标,然后序列化存入文件。而后勇ARCHIVE把文件读回一个新的CImageList,结果图标变成了1万5千个。丢失了好多谁知道原因吗?代码基本就是MSDN上说的下面是我再CODEGRU发的帖,半天也没人回,不知道这边有没有人能帮忙Hifriends,IhadaprobleminusingCImageListforserilization.MyprogramdecoratesomebitmapsandputthemintoCImageList,beforewritingmyimagelistintoArchive,itcontains80350images.thearchivefileis5.1MB.ButafterIreadtheimagesfromthisarchivebacktoanewCImageListitbecome15031,soalotoficonscan'tbedisplayed.IsimplyusesthewaydescribedinMSDNasfollowing:{CImageListmyIList;myIList.Create(20,16,TRUE,100,100);...Add80350images...CFilemyFile(text(xxx.dat"),CFile::modeCreate|CFile::modeWrite);CArchivear(&myFile,CArchive::store);myIList.Write(&ar);ar.Close()myFile.close();}{CFilemyFile(TEXT("xxx.dat"),CFile::modeRead);CArchivear(&myFile,CArchive::load);CImageList*b=newCImageList();bb->Read(&ar)}
解决方案
解决方案二:
imagelist应该是有限制的,一般用来装不多的图片,主要还是图标
解决方案三:
我现在得应用场景是,有一系列的表示类别的图标,同事又有一系列表示状态之类的图标,在程序启动的时候需要把他们以N*N的方式进行合并,然后就出来上万个不同的图标。组合好后放在内存里用的时候是没问题的,说明没有超过IMAGELIST的限制。但是这会导致程序加载的时候在这个合并图片的过程中效率很低,需要30秒的时间,客户表示不爽。所以我想把图标存到文件里,这样只需要第一次运行的时候花30秒了,以后打开程序的时候就不需要做图片了。结果存下来,再恢复的时候,数量就少了很多