当前位置:首页 > 编程开发

关于GetDIBits函数的使用问题

webgou17年前 (2009-10-10)编程开发909

最近在编程的时候需要获取位图的二进制数据, 在使用GetDIBits函数的时候发现一个古怪的问题, 虽然解决了其中的问题, 但是没有找到其中的原因.这里描述一些遇到的问题.
第一次:为了从位图句柄得到数据, 创建了内存设备描述句柄, 而后根据MSDN描述, 两次调用GetDIBits函数, 第一次得到位图的参数, 第二次获得二进制数据, 最后发现我在Debug模式下执行没有任何问题(实际上是有问题, 只是程序不会报错), 可是在Release下就会出现严重的错误: 操作的内存是只读的. 后来仍旧在Debug下跟踪发现, 在第二次调用GetDIBits的时候, 内存设备描述句柄被改变了. 为了发现这个问题, 调试的时候使用了VC 6.0 带的BoundsChecker. 于是修改程序, 通过GetObject获取位图数据, 直接一次调用GetDIBits, 解决问题.
第二次:原以为上面解决之后就一切搞定了, 很快就又出现一个问题, 有一位用户的机器上分辨率的色素是16位色, 我们的程序一执行就出错, 而且还是只读内存问题, 经过跟踪定位, 发现又是这个GetDIBits函数出现问题了. 事情非常凑巧, 我们读取的位图大小是77*22, 我们发现只要使用了这个函数, 程序就出错, 不用这个函数, 程序没有问题, 注意到又是内存问题, 我们怀疑是申请的内存小了, 造成越界了. 于是我们再次回到MSDN的路, 在前面传递空地址调用GetDIBits, 获取位图的数据看看, 结果发现它得到的位图的大小居然是78*22, 和GetObject得到的信息不一样. 问题的解决也很简单, 我们调整了位图大小(78*22). 出现这个问题的原因应该是字节对齐的原因.
于是第二次出现问题的原因时找到了, 可以第一次的原因呢? 因为按照第二次的原因, 我应该使用两次调用GetDIBits, 可是这样会不会会带第一次的情形呢? 测试中... 失败了, 确实会回到第一种情况!

 

[from:http://community.studyez.com/blogs/zhaoyang0618/archive/2007/05/28/_73518E4E_GetDIBits_FD51706584767F4F2875EE959898_.aspx]
Published 2007年5月28日 20:10 作者 zhaoyang0618

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=15

标签: c语言
分享给朋友:

“关于GetDIBits函数的使用问题” 的相关文章

线程同步

效率      you should try to use nonshared data first and then use volatile reads, volatile writes, interlocked APIs, SRWL…

线路板设计软件(PCB设计软件)详细综述

    随着电子技术的高速发展,对电子产品的要求越来越高,功能越来越多,虽然蕊片的集成度越来越高,但是,对于线路板的设计要求,也是越来越高的. 线路板设计,也叫PCB设计,因为线路板在英文的全称为 Printed circuit board,简写为PCB,所以线路…

Xcode EXC_BAD_ACCESS 问题查找

关于EXC_BAD_ACCESS问题采用NSZombieEnabled解决方法,中途遇到几个问题总结: 1。Xcode 4.4 找不到Execudetable.(选中project -˃Products下app,标题栏-˃Product-˃Edit Scheme) 2。加入NSZombieEnab…

Visual Studio 2005 SP1安装

解压到%temp%\临时目录(对于我的Visual Studio 2005 Team System,这需要C:\Documents and Settings\Administrator\Local Settings\Temp下面1个多GB的空间) 把自己复制到%temp%下(400多MB) 把自己复…

送给所有的共享新手

经常看到很多同行们对共享软件能否赚到钱感到困惑,虽然大家都知道的周易前辈的MP3 CD Maker创下了月入四万的记录,但这对我们大多数人来说,只是一个很遥远的梦,就好象是水中的月亮,可望不可及。这个也曾经是我投入这个行业是的目标, 虽然到目前我的收入才达到他的四分之一,但我已心滿意足了,回顾两年…

Android重力感应实现方式简介

Android中的很多游戏的游戏都使用了重力感应的技术,但其api demo却并没有重力感应的实例(不知道是不是我没找到,找到的朋友麻烦告诉我一下,谢谢),因为开发的需要,就研究了一下重力感应这方面,因为网上关于 这方面的东西比较少,所以写出来跟大家交流一下,算是抛砖引玉吧。(ps.因为重力感应式…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。