24位bmp顺时针旋转90度C++代码求查错

2024-12-29 03:05:37
推荐回答(2个)
回答1:

参考一下VC++数字图像处理类的书,下面是一个类似的,自己看看有什么帮助吗
/***********************************************************************
* 函数名称:
* Anticlockwise90()
*
*
*说明:对图像逆时针旋转90度
***********************************************************************/
void GeometryTrans::Anticlockwise90()
{
//释放旧的输出图像缓冲区
if(m_pImgDataOut!=NULL){
delete []m_pImgDataOut;
m_pImgDataOut=NULL;
}

//输入图像每行像素字节数 int lineByte=(m_imgWidth*m_nBitCount/8+3)/4*4;
//输出图像的宽和高
m_imgWidthOut=m_imgHeight;
m_imgHeightOut=m_imgWidth;

//输出图像每行像素字节数 int lineByteOut=(m_imgWidthOut*m_nBitCount/8+3)/4*4;
//申请缓冲区,存放输出结果 m_pImgDataOut=new unsigned char[lineByteOut*m_imgHeightOut];
//循环变量,图像坐标 int i,j;
//循环变量,像素的每个通道 int k;
//每像素字节数,输出图像与输入图像相等 int pixelByte=m_nBitCountOut/8;
//逆时针90度
for(i=0;i for(j=0;j for(k=0;k *(m_pImgDataOut+i*lineByteOut+j*pixelByte+k)
=*(m_pImgData+(m_imgHeight-1-j)*lineByte+i*pixelByte+k);
}
}
}

回答2:

for (LONG i = 0; i < Height; i++) {
file.read((char *) p_bmp,Width * 3);//这里p_bmp不用偏移吗?
file.seekg(skipnum,ios::cur);//跳过多余的0
}