位图读取时,一般都是
for(GLint j=0; j< pThis->m_nHeight-1; j++)
{
for(GLint k=0; k< pThis->m_nWidth-1; k++)
{
pixels[i][j]= pf[m_nWidth*j+k] //pf 是指向像素开始的指针
}
}
但是在保存时,应该是
for(int i=0 ;i<m_nHeight;i++)
{
for(int j=0;j<nByteWidth;j++)
{
// p[0]=BYTE(pixels[i][j])
p[0]=BYTE(pixels[m_nHeight-1-i][j])
}
}
即保存时,不能是
p[0]=BYTE(pixels[i][j]),
因为位图格式所规定的方式存贮的记录顺序是在扫描行内从左到右,扫描行间是从下到上。
否则最后保存的位图与实际位图是呈上下颠倒的关系。
另外,注意,在保存时,应该按照nByteWidth来,超过的,应该填补为0.最后正确的保存代码如下:
for(int i=0 ;i<m_nHeight;i++)
{
for(int j=0;j<nByteWidth;j++)
{
p=m_lpBits+nByteWidth*i+j;
if(j>m_nWidth)
p[0]=0;
else
p[0]=BYTE(pixels[m_nHeight-i-1][j]);
}