CImageList.Read读到的image数和先前写入的不一样

问题描述

我往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秒了,以后打开程序的时候就不需要做图片了。结果存下来,再恢复的时候,数量就少了很多

时间: 2024-12-31 07:10:16

CImageList.Read读到的image数和先前写入的不一样的相关文章

代码-使用RAM核和TEMAC核,从RAM中读数据,经MAC后再写入RAM中

问题描述 使用RAM核和TEMAC核,从RAM中读数据,经MAC后再写入RAM中 求代码.本人小白初学.使用RAM核和TEMAC核,从RAM中读数据,经MAC后再写入RAM中 解决方案 Xilinx ISE生成rom/ram IP核 解决方案二: http://bbs.elecfans.com/jishu_428893_1_1.html

iOS 我现在只是要收到消息提醒 然后获取未读消息数就行 用哪些方法呢?

问题描述 iOS  我现在只是要收到消息提醒 然后获取未读消息数就行  用哪些方法呢?主要是demo里的感觉不太好整明白 谢谢了 解决方案 1.收到消息提醒,去调用接口就行了,参考下:#import "EMCDDeviceManager.h"#import <AudioToolbox/AudioToolbox.h>@interface EMCDDeviceManager (Remind)// 播放接收到新消息时的声音- (SystemSoundID)playNewMessa

可扩展的快速读写锁

原文链接(需翻墙) ,译文链接,  译者:中麦-张军 ,校对:梁海舰 介绍 读写锁是一种允许多个线程并发地访问一个或一组资源的并发结构,这意味着在实践中如果你有一个或一组几乎是以只读方式访问时,可以考虑使用读写锁(后文统称为RWLocks)来保护它们: Java在java.util.concurrent.locks.ReentrantReadWriteLock中提供了一个很好的RWLocks,是由Doug Lea创建,它有很多特性如:重入,公平锁,锁降级等: 如果你是一个无法摆脱PThreads

c语言-关于用【C语言】写——回文数——的代码【高级语言程序设计】

问题描述 关于用[C语言]写--回文数--的代码[高级语言程序设计] 问题:判定用户输入的正整数是否为"回文数". 回文数即121,232正面读反面读都相同的数, 运用c语言来编写一个程序代码. #include main() . . . 谢谢大神们了(>_<) 解决方案 http://blog.sina.com.cn/s/blog_5072a15d0100msdb.html 解决方案二: http://www.bianceng.cn/Programming/C/20140

java读Excel

问题描述 java读取Excel能不能通过行号加'列名'读取数据! 解决方案 解决方案二:你是用什么第三方包来做?解决方案三:结帖率有点低解决方案四:回一楼:我是用jxl.jar包来做的,结贴率低,对不起,忘了!呵呵!解决方案五:用poi或者jxl都可以.如果你够强,试着把xls当作一个巨大的xml来解析.解决方案六:poi解决方案七:我只用POI做过,感觉文档很详细,只要照着写就行了,行号加列号取得数据倒是可以,不知道楼主所说的列名指的是什么,难道是自己写的一个表格的列名?解决方案八:对啊,A

《UNIXLinux程序设计教程》一2.4 读和写流

2.4 读和写流 一旦打开了一个流,就能对它进行读写,读写可以按无格式方式也可以按有格式方式进行.这一节介绍无格式I/O函数,下一节介绍有格式I/O函数.有以下三种类型的无格式I/O函数可供选择:1)字符I/O函数.这种函数每次读或写一个字符.2)行I/O函数.这种函数每次读写一行,每一行以换行符结束.3)块I/O函数.这种函数支持成块I/O,它们每次读写若干个对象,每个对象的大小是指定的.块I/O有时也称为二进制I/O.对象I/O或结构I/O. 2.4.1 字符I/O 如下三个字符输入函数每次

常识之外:全表扫描为何产生大量 db file sequential read 单块读?

原创 2016-07-05 熊军 Oracle   编辑手记:在理解Oracle技术细节时,我们不仅应该读懂概念,还要能够通过测试验证细节,理解那些『功夫在诗外』的部分,例如全表扫描和单块读. 开发人员在进行新系统上线前的数据校验测试时,发现一条手工执行的 SQL 执行了超过1小时还没有返回结果.SQL 很简单: 下面是这条 SQL 的真实的执行计划: 很显然,在这个表上建 billing_nbr 和 start_date 的复合索引,这条 SQL 就能很快执行完(实际上最后也建了索引).但是这

C#使用读写锁三行代码简单解决多线程并发的问题_C#教程

在开发程序的过程中,难免少不了写入错误日志这个关键功能.实现这个功能,可以选择使用第三方日志插件,也可以选择使用数据库,还可以自己写个简单的方法把错误信息记录到日志文件. 选择最后一种方法实现的时候,若对文件操作与线程同步不熟悉,问题就有可能出现了,因为同一个文件并不允许多个线程同时写入,否则会提示"文件正在由另一进程使用,因此该进程无法访问此文件". 这是文件的并发写入问题,就需要用到线程同步.而微软也给线程同步提供了一些相关的类可以达到这样的目的,本文使用到的 System.Thr

一些面试题,整理自网络,就不一一帖原址了

腾讯面试题:tcp三次握手的过程,accept发生在三次握手哪个阶段? 答accept发生在三次握手之后. 第一次握手:客户端发送syn包(syn=j)到服务器. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k). 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1). 三次握手完成后,客户端和服务器就建立了tcp连接.这时可以调用accept函数获得此连接.   const的含义及实现机制,比