可以从程序断点处看到2行13列的像素值是255,255代表白色,但是用ps打开图片,很清楚2行13列是黑色,这不是矛盾吗,纠结中,求大手解决
程序呢,断点呢,建议上传程序和图像文件到网盘才好判断。
BOOL CSummerPJCarDoc::ReadBMP(LPCTSTR lpszPathName)
{
CFile file;
LPathName = lpszPathName;
long lTotal = 0;
file.Open(lpszPathName, CFile::modeRead);
file.Read(&bmpFH, sizeof(BITMAPFILEHEADER));
lpbmi = (LPBITMAPINFO)new char[sizeof(BITMAPINFO)+4 * (1 << 8)];
file.Read(lpbmi, sizeof(BITMAPINFOHEADER));
m_nColorBits = lpbmi->bmiHeader.biBitCount;
imageHeight = lpbmi->bmiHeader.biHeight;
imageWidth = lpbmi->bmiHeader.biWidth;
if (m_nColorBits == 8)
{
lTotal = imageWidth*imageHeight;
file.Read(&(lpbmi->bmiColors[0]), 256 * 4);
}
else if (m_nColorBits == 24)
{
lTotal = imageWidth*imageHeight * 3;
}
else
{
file.Close();
return FALSE;
}
m_pBits = new unsigned char[lTotal];
file.Read(m_pBits, lTotal);
file.Close();
return TRUE;
}
程序在这里
一般来说,是你计算下标错误了,实际不可能出现你所描述的情况。
你再检查一下所有的图像数据,我只能怀疑你对 BMP 数据格式的了解有限。这不是程序源代码的问题!
bmp格式的图像,原点是图像的左下角,这个你注意一下