CImageList.Read读到的image数和先前写入的不一样
我往CImageList里加入了8万多个图标,然后序列化存入文件。而后勇ARCHIVE把文件读回一个新的CImageList,结果图标变成了1万5千个。丢失了好多谁知道原因吗?代码基本就是MSDN上说的
下面是我再CODEGRU发的帖,半天也没人回,不知道这边有没有人能帮忙
Hi friends,
I had a problem in using CImageList for serilization.
My program decorate some bit maps and put them into CImageList, before writing my imagelist into Archive, it contains 80350 images. the archive file is 5.1 MB.
But after I read the images from this archive back to a new CImageList it become 15031, so a lot of icons can't be displayed.
I simply uses the way described in MSDN as following:
{
CImageList myIList;
myIList.Create(20, 16, TRUE, 100, 100);
...Add 80350images...
CFile myFile(text(xxx.dat"), CFile::modeCreate | CFile::modeWrite);
CArchive ar(&myFile, CArchive::store);
myIList.Write(&ar);
ar.Close()
myFile.close();
}
{
CFile myFile(TEXT("xxx.dat"), CFile::modeRead);
CArchive ar(&myFile, CArchive::load);
CImageList* b = new CImageList();
bb->Read(&ar)
} --------------------编程问答-------------------- imagelist应该是有限制的,一般用来装不多的图片,主要还是图标
--------------------编程问答-------------------- 我现在得应用场景是,有一系列的表示类别的图标,同事又有一系列表示状态之类的图标,在程序启动的时候需要把他们以N*N的方式进行合并,然后就出来上万个不同的图标。组合好后放在内存里用的时候是没问题的,说明没有超过IMAGELIST的限制。
但是这会导致程序加载的时候在这个合并图片的过程中效率很低,需要30秒的时间,客户表示不爽。
所以我想把图标存到文件里,这样只需要第一次运行的时候花30秒了,以后打开程序的时候就不需要做图片了。
结果存下来,再恢复的时候,数量就少了很多
补充:.NET技术 , VC.NET