3150|4

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

有关于位图的2个问题 [复制链接]

第一个问题:在使用GetObject(hBitmap, sizeof(BITMAP), &bm)函数取得的位图的属性中的bm.bmBitsPixel表示的应该是位图的位深吧?但是我在XP的系统上使用该函数的时候,当我把系统的分辨率设置为16位时,该函数得到的就为16,如果把系统的分辨率设置为32位时,该函数得到的就为32,不管使用什么样位深的位图都是这样的结果,感觉与位图的无关,而与系统有关。但是,当我在开发板上使用该函数的时候情况就变了,函数得到的值和图片的位深相同,请问这是为什么?是否是我在使用上由什么不对的地方。
第二个问题:我对24位位深的位图计算它的存放RGB颜色的数组的大小时,我使用bm.bmWidth*bm.Height*3来计算。而我看到有别人是这样来计算:bm.bmHeight*WIDTHBYTES(bm.bmWidth*24)
其中:#define  WIDTHBYTES(bits) ((((bits) + 31)>>5)<<2)
这样他计算出来的长度比我的大些,而且经过我试验证明他的计算方法是对的,而我的却不对,少了一点。少的数量正好是图片的高度,是否是图片在格式上有什么要求,比如说象字符串一样在每行的后面要有一个\0的结束符一样(这种说法肯定不正确)?我想问下为什么我的计算方法不对,而他的又是对的???

最新回复

很感谢nbcool(载舟之水),现在已经基本明白了。  详情 回复 发表于 2008-7-16 15:03
点赞 关注

回复
举报

51

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没人理我, UP
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
第二个问题数据补齐.第一个不知道. 你可以搜索一下BITMAP来了解相关知识
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
1.位图数据分为DIB(设备无关)和DDB(设备有关),当hBitmap是由DDB创建时,GetObject得到的是与设备有关的信息,所以和你的系统显示设备有关,至于你在开发板上发现一样,由于你没描述清楚,一个可能是开发板LCD本来就是16位的,刚好和你的位图一样,另一个可能是你用的系统不同,API生成的可能就是DIB,所以是和位图文件数据一致,位图文件可以看作DIB。

2.位图的结构是标准的,无论是多少位,每行象素规定是4字节对齐,WIDTHBYTES(bm.bmWidth*24) 正是计算成对齐的行象素个数。
  如果图象宽度是奇数,都要补齐,多出的数据不会被API用来显示。你应该先看位图结构的标准文档。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
很感谢nbcool(载舟之水),现在已经基本明白了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表