图像旋转90度(CImage类实现)(不同的位深度)

//读取原始图片信息

CImage * srcImage = new CImage();

srcImage->Load(strPicName);
BYTE* srcPtr=(BYTE*)srcImage->GetBits();
int srcBitsCount=srcImage->GetBPP();
int srcWidth=srcImage->GetWidth();
int srcHeight=srcImage->GetHeight();
int srcPitch=srcImage->GetPitch();

//删除原始图片

DeleteFile(strPicName);

//创建新图像  

CImage * destImage = new CImage(); 
destImage->Create(1200,800,srcBitsCount,0); 

//加载调色板
if(srcBitsCount<=8 && srcImage->IsIndexed())//需要调色板  
{  
RGBQUAD pal[256];  
int nColors=srcImage->GetMaxColorTableEntries();
if(nColors>0)  
{   
srcImage->GetColorTable(0,nColors,pal);  
destImage->SetColorTable(0,nColors,pal);//复制调色板程序  
}     
}   
//目标图像参数  
BYTE *destPtr=(BYTE*)destImage->GetBits();  
int destPitch=destImage->GetPitch();  
//复制图像数据  
for(int i=0 ; i<1200;i++)  
{  
for(int j=0;j<800;j++)

{

if(srcBitsCount == 24)

{

*(destPtr+ (799-j)*destPitch + 3*i) = *(srcPtr + i*srcPitch +3*j);//目的图片的第一列
*(destPtr+ (799-j)*destPitch + 3*i+1) = *(srcPtr + i*srcPitch +3*j+1);

*(destPtr+ (799-j)*destPitch + 3*i+2) = *(srcPtr + i*srcPitch +3*j+2);

}

else if(srcBitsCount == 8)

{

*(destPtr+ (799-j)*destPitch + i) = *(srcPtr + i*srcPitch +j);//目的图片的第一列

}

} }    //保存新图像 destImage->Save(strPicName); 

猜你喜欢

转载自blog.csdn.net/gezi322/article/details/105408458