位图保存时上下颠倒?

位图读取时,一般都是

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]); 
}


 
 


   
   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值