我直接读位图(确认是256级灰度的)
AfxMessageBox(s)显示出位图数据总长度(l)和其宽(w)高(h),
结果有的位图为l = w * h
有的却为l = (w + 1) * h
比如:有一个结果为:30804,203,151 :(203+1)*151 = 20804
为什么?
我用其他函数显示出位图结果,l = w * h的位图正常显示,l = (w + 1) * h的位图显示正好由位图底部到顶部每一行向左错开一位象素,图中由左下角开始向右上方形成一个45度(形状为"/")的黑线,所以估计原位图文件每一行后都多了一位,致使显示错位,但是为什么呢?读文件的源码如下:BYTE* LoadFile(const char* pszDibFileName, int *wo, int *ho)
{
ASSERT(pszDibFileName);
CFile cf;
cf.Open(pszDibFileName, CFile::modeRead);

cf.Seek(sizeof(BITMAPFILEHEADER), CFile::begin);
BITMAPINFOHEADER info;
cf.Read(&info, sizeof(BITMAPINFOHEADER));
int w = info.biWidth;
int h = info.biHeight;
BYTE *pResult = new BYTE[w * h];
cf.Seek(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*256, CFile::begin);
cf.Read(pResult, w * h);
*wo = w;
*ho = h;
CString s;
s.Format("%d,%d,%d", cf.GetLength() - sizeof(BITMAPFILEHEADER) - sizeof(BITMAPINFOHEADER) - sizeof(RGBQUAD)*256, w, h);
AfxMessageBox(s);
return pResult;
}//#LoadFile