CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

有一事不明!

楼主Cbird()2002-10-03 20:10:34 在 VC/MFC / 基础类 提问

颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。  
  位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:  
  typedef   struct   tagBITMAPINFO   {  
  BITMAPINFOHEADER   bmiHeader;    
  RGBQUAD   bmiColors[1];    
  }   BITMAPINFO   *PBITMAPINFO;  
  现给1位dib(即双色)分配PBITMAPINFO结构并初始化,  
  pbmInfo=(PBITMAPINFO)malloc(sizeof(BITMAPINFO)+sizeof(RGBQUAD));  
  pbmInfo->bmiHeader=bmInfoh;  
  pbmInfo->bmiColors[0].rgbBlue=0xff;  
  pbmInfo->bmiColors[0].rgbGreen=0xff;  
  pbmInfo->bmiColors[0].rgbRed=0xff;  
  pbmInfo->bmiColors[0].rgbReserved=0;  
  pbmInfo->bmiColors[1].rgbBlue=0;  
  pbmInfo->bmiColors[1].rgbGreen=0;  
  pbmInfo->bmiColors[1].rgbRed=0;  
  pbmInfo->bmiColors[1].rgbReserved=0;  
   
  问题:当我跟踪调试时发现pbmInfo->bmiColors[1]各成员值并非全0啊,何故? 问题点数:20、回复次数:13Top

1 楼everandforever(Forever)回复于 2002-10-03 20:19:54 得分 15

你跟踪到哪一步?pbmInfo->bmiColors[1]的4条赋值语句都执行了吗?Top

2 楼Cbird()回复于 2002-10-03 20:24:16 得分 0

都执行了啊!  
  还看了生成的dib文件,发现颜色不对Top

3 楼everandforever(Forever)回复于 2002-10-03 20:27:31 得分 0

typedef   struct   tagBITMAPINFO   {  
  BITMAPINFOHEADER   bmiHeader;    
  RGBQUAD   bmiColors[1];    
  }   BITMAPINFO   *PBITMAPINFO;  
   
  这个结构定义,只有一个RGBQUAD成员啊,你怎么  
  pbmInfo->bmiColors[0];  
  pbmInfo->bmiColors[1];  
   
  ??Top

4 楼Cbird()回复于 2002-10-03 20:35:04 得分 0

在Charles   Petzold的《windows程序设计》中有这么一个例子:  
  如果需要为8位dib分配PBITMAPCOREINFO结构,可以这样做:  
  pbmci=malloc(sizeof(BITMAPCOREINFO)+255*sizeof(RGBTRIPLE));  
  然后可以这样访问RGBTRIPLE结构:  
  pbmci->bmiColors[i]   ----------不知道这算什么意思Top

5 楼everandforever(Forever)回复于 2002-10-03 20:45:04 得分 0

偶,这样是可以的。那么,你换个方法试试:  
  pbmInfo=(PBITMAPINFO)malloc(sizeof(BITMAPINFO)+sizeof(RGBQUAD));  
                    memset(   pbmInfo,0,sizeofsizeof(BITMAPINFO)+sizeof(RGBQUAD));     //加上这句试试  
  pbmInfo->bmiHeader=bmInfoh;  
  pbmInfo->bmiColors[0].rgbBlue=0xff;  
  pbmInfo->bmiColors[0].rgbGreen=0xff;  
  pbmInfo->bmiColors[0].rgbRed=0xff;  
  pbmInfo->bmiColors[0].rgbReserved=0;  
  pbmInfo->bmiColors[1].rgbBlue=0;  
  pbmInfo->bmiColors[1].rgbGreen=0;  
  pbmInfo->bmiColors[1].rgbRed=0;  
  pbmInfo->bmiColors[1].rgbReserved=0;  
  Top

6 楼Cbird()回复于 2002-10-03 20:59:30 得分 0

呵呵,还是不对:)Top

7 楼Cbird()回复于 2002-10-03 21:07:10 得分 0

改成别的数值后,都影响不了最终的结果  
   
  可能被重新赋值了!Top

8 楼everandforever(Forever)回复于 2002-10-03 21:12:48 得分 0

当我跟踪调试时发现pbmInfo->bmiColors[1]各成员值并非全0啊  
   
  _____________  
  现在已经全0了?Top

9 楼Cbird()回复于 2002-10-03 21:18:28 得分 0

没有,pbmInfo->bmiColors[0]和pbmInfo->bmiColors[1]  
  都不是正确的值(即所赋给它们的值)  
   
  现仍在检查中Top

10 楼everandforever(Forever)回复于 2002-10-03 21:22:42 得分 0

你都memset成0了,它还不是0?Top

11 楼Cbird()回复于 2002-10-03 21:28:36 得分 0

可能根本没写到文件中!  
  如何确保DIB文件中颜色表紧跟信息头呢?Top

12 楼everandforever(Forever)回复于 2002-10-03 21:31:31 得分 0

这样就可以了啊,BITMAPINFOHEADER,RGBQUAD,都是字对齐的。  
  这部分应该没有问题。Top

13 楼tiankong16354(天相北斗)回复于 2002-10-03 21:38:03 得分 5

不应该有问题呀,2值图象我也做过,  
  我觉得它好象是0与非0的组合,不一定非是1吧,  
  关键问题应该是如何分离它们,再组装起来,  
  你会吗?Top

相关问题

  • 一事不明
  • 有一事不明!
  • 小弟,有一事不明...
  • 一事不明白(1)
  • 小弟一事不明,请教了!
  • 各位高手,有一件事不明
  • 【东大进来】有一小事不明
  • 各位大虾,小弟有一事不明,请大虾赐教!
  • c语言中我有一事不明白。
  • 小弟刚来, 有一事不明,请教各位

关键词

  • 结构
  • 文件
  • 信息
  • pbminfo
  • bmicolors
  • pbitmapinfo
  • rgbquad
  • bitmapinfo
  • rgbreserved
  • rgbgreen

得分解答快速导航

  • 帖主:Cbird
  • everandforever
  • tiankong16354

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo