有一事不明!
颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个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




