正在加载图片...
ImgSize=(DWORD)LineBytes"bi. biHeight / Num Colors为实际用到的颜色数,即调色板数组中的颜色个数 if(bi. biCIrUsed!=0) ∥如果 bi biClrUsed不为零,即为实际用到的颜色数 NumColors-=(DWORD)bi. biClrUsed else∥否则,用到的颜色数为2 biBitCount switch(bi. biBitCount)i Num Colors=2. Num Colors=16 break. Num Colors=256 Num Colors=0;∥|对于真彩色图,没用到调色板 default:∥不处理其它的颜色数,认为出错。 Message Box(hWnd, Invalid color numbers! " "Error Message MB OK MB ICONEXCLAMATION Iclose(hf); return FALSE;关闭文件,返回 FALSE if(bf. bfoffBits! =(DWORD)(Num Colors*sizeof( RGBQUAD)+ sizeof( BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER))) ∥计算出的偏移量与实际偏移量不符,一定是颜色数出错 Message Box(hWnd, "Invalid color numbers! " " Error Message MB OK MB ICONEXCLAMATION) Iclose(hf); return FAlse;∥关闭文件,返回 FALSE bf. bfSize=sizeof( BITMAPFILEHEADER)+sizeof( BI TMAPINFOHEADER)+ Num Colors*sizeof( RGBQUAD)+ImgSize, ∥分配内存,大小为 BITMAPINFOHEADER结构长度加调色板+实际位图ImgSize=(DWORD)LineBytes*bi.biHeight; //NumColors 为实际用到的颜色数 ,即调色板数组中的颜色个数 if(bi.biClrUsed!=0) //如果 bi.biClrUsed 不为零,即为实际用到的颜色数 NumColors=(DWORD)bi.biClrUsed; else //否则,用到的颜色数为 2 biBitCount。 switch(bi.biBitCount){ case 1: NumColors=2; break; case 4: NumColors=16; break; case 8: NumColors=256; break; case 24: NumColors=0; //对于真彩色图,没用到调色板 break; default: //不处理其它的颜色数,认为出错。 MessageBox(hWnd,"Invalid color numbers!","Error Message", MB_OK|MB_ICONEXCLAMATION); _lclose(hf); return FALSE; //关闭文件,返回 FALSE } if(bf.bfOffBits!=(DWORD)(NumColors*sizeof(RGBQUAD)+ sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER))) { //计算出的偏移量与实际偏移量不符,一定是颜色数出错 MessageBox(hWnd,"Invalid color numbers!","Error Message", MB_OK|MB_ICONEXCLAMATION); _lclose(hf); return FALSE; //关闭文件,返回 FALSE } bf.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+ NumColors*sizeof(RGBQUAD)+ImgSize; //分配内存,大小为 BITMAPINFOHEADER 结构长度加调色板+实际位图
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有