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

来源:互联网 发布:做人工智能的企业 编辑:程序博客网 时间:2024/06/09 18:27

//读取原始图片信息

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);
delete srcImage;
delete destImage;
阅读全文
0 0