BMP文件放到VS的資源中時,VS會將BMP的文件頭去掉,即BITMAPFILEHEADER,這個結構體去除。所以當加載BMP到內存中時,如果是使用GDI+或是其它解釋庫時,會解析失敗。

所以在讀取BMP資源時,需要加上BITMAPFILEHEADER結構體。

// pvResData  為已經讀入到內存的BMP數據。
//获得位图信息头
BITMAPINFOHEADER bmpInfoHdr;
CopyMemory(&bmpInfoHdr, pvResData, sizeof(BITMAPINFOHEADER));
//获得位图颜色表中RGBQUAD结构的个数
long nColorEntries;
switch(bmpInfoHdr.biBitCount)
{
case 1:
nColorEntries = 2;
break;
case 4:
nColorEntries = 16;
break;
case 8:
nColorEntries = 256;
break;
default:
nColorEntries = 0;
}
//根据位图信息头创建位图文件头
BITMAPFILEHEADER bmpFileHdr;
bmpFileHdr.bfType = 0x4d42; // 'BM'
bmpFileHdr.bfSize = sizeof(BITMAPINFOHEADER) + dwResSize;
bmpFileHdr.bfReserved1 = bmpFileHdr.bfReserved2 = 0;
bmpFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * nColorEntries;
//写入位图文件头
//...
// 再寫入 pvResData

  參考:

http://blog.csdn.net/lyserver/article/details/2874366

把資源加载到内存中 BMP 出错的更多相关文章

  1. iOS图片加载到内存中占用内存情况

    我的测试结果: 图片占用内存   图片尺寸           .png文件大小 1MB              512*512          316KB 4MB              10 ...

  2. java动态编译类文件并加载到内存中

    如果你想在动态编译并加载了class后,能够用hibernate的数据访问接口以面向对象的方式来操作该class类,请参考这篇博文-http://www.cnblogs.com/anai/p/4270 ...

  3. 想要配置文件生效 需要通过添加到web.xml加载到内存中

    想要配置文件生效 需要通过添加到web.xml加载到内存中

  4. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)

    最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...

  5. 深入浅出JVM(一):你写得.java文件是如何被加载到内存中执行的

    众所周知,.java文件需要经过编译生成.class文件才能被JVM执行. 其中,JVM是如何加载.class文件,又做了些什么呢? .class文件通过 加载->验证->准备->解 ...

  6. gensim Word2Vec 训练和使用(Model一定要加载到内存中,节省时间!!!)

    训练模型利用gensim.models.Word2Vec(sentences)建立词向量模型该构造函数执行了三个步骤:建立一个空的模型对象,遍历一次语料库建立词典,第二次遍历语料库建立神经网络模型可以 ...

  7. linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间

    转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...

  8. EF 学习系列三 数据操作数据加载及EF中执行Sql

    1.实体状态 我们通过EF来对数据库进行操作并持久化到数据库,那么EF必然通过EF上下文来维护实体的状态,明确知道每一个状态所对应的操作.也就是说EF通过上下文负责跟踪实体的状态.EF实体状态存在命名 ...

  9. Spark在处理数据的时候,会将数据都加载到内存再做处理吗?

    对于Spark的初学者,往往会有一个疑问:Spark(如SparkRDD.SparkSQL)在处理数据的时候,会将数据都加载到内存再做处理吗? 很显然,答案是否定的! 对该问题产生疑问的根源还是对Sp ...

随机推荐

  1. 【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

    上面博文,主要简单的介绍了一下SSH的基本概念,比較宏观,作为刚開始学习的人可以有一个总体上的认识,个人觉得对学习有非常好的辅助功能.它不不过一个"瞭望塔".更是检验是否真正掌握全 ...

  2. win10下Visual Studio 2015,C++ x64编译zmq

    PS.本人编译过程踩得坑,记录备忘 下载:(1)官网:http://zeromq.org/intro:get-the-software,有简明的编译方式,cmake的,这里不多赘述 (2)到GitHu ...

  3. OTU_Network&calc_otu

    # -*- coding: utf-8 -*- # __author__ = 'JieYap' from biocluster.agent import Agent from biocluster.t ...

  4. pdo连接mysql操作方法

    PDO常用方法: PDO::query()主要用于有记录结果返回的操作(PDOStatement),特别是select操作. PDO::exec()主要是针对没有结果集合返回的操作.如insert,u ...

  5. 服务器server2008网站iis7+php环境的搭建

    IIS+FastCGI+PHP5_32_Gzip环境搭建-------------------0.装iis71.把php_5.32_win86解压到d:\php2.php.ini文件已经配置好不需要在 ...

  6. Smart Client技术简要总结

    摘要:Smart Client简称智能客户端,是Microsoft推出的一种将B/S(瘦客户端)和C/S(胖客户端)结合在一起的一种技术.Smart Client结合了B/S和C/S的优势,具有新的特 ...

  7. SecureCRT终端上使用spark-shell时按退格键无反应的解决方法

    问题:用SecureCRT远程连接至Spark集群,启动spark-shell却发现输错命令后却无法用退格键删除. 解决方法: 第一步: 在SecureCRT的菜单栏选择“OPtions(选项)”按钮 ...

  8. unity的自带特性

    2016/9/24补充: unity官方有一篇文章对菜单扩展讲的不错 https://unity3d.com/cn/learn/tutorials/topics/interface-essential ...

  9. 如何卸载Mysql

    mysql安装的时候会出现各种问题,尤其对新手,卸载不干净,重新安装会受到影响.也不能有点问题就重装系统吧!现在提供一种通过删除注册表的方式卸载mysql! 运行regedit打开注册表,搜索mysq ...

  10. Objective-C_Block

    一.Block语法 Block:块语法,本质上是匿名函数(没有名称的函数),Block变量存放函数的实现,通过Block变量能直接调⽤函数.标准C里面没有Block.C语言的后期扩展版本号.加⼊了匿名 ...