用VC编了一个读取三幅图像,和成假彩色图像并显示的程序。刚开始用的原图512*512,显示没有错误,后来我把图像裁剪了一下,变成315*512了,可显示出来的就是扭曲的噪声似的图像。不知道怎么回事。源代码如下:
void CDecisionTreeDoc::OnFileOpen() 
{
// TODO: Add your command handler code here
int i,j;
if(ReadImageData("E:\\TESTOMIS\\30.bmp",1)==-1)return;
if(ReadImageData("E:\\TESTOMIS\\20.bmp",2)==-1)return;
if(ReadImageData("E:\\TESTOMIS\\8.bmp",3)==-1)return;
if((BmpImage=new unsigned char[3*(long)bwidth1*(long)bheight])==0)
{
AfxMessageBox("影象空间申请失败",MB_OK,0); return;
} for(j=0;j<bheight;j++)
{
for(i=0;i<bwidth1;i++)
{
*(BmpImage+long(j*bwidth1*3+i*3))=*(BlueImage+long(j*bwidth1+i));
*(BmpImage+long(j*bwidth1*3+i*3+1))=*(GreenImage+long(j*bwidth1+i));
*(BmpImage+long(j*bwidth1*3+i*3+2))=*(RedImage+long(j*bwidth1+i));
}
} rp.x = bwidth;
rp.y = bheight; fileh2.biBitCount =24;
fileh2.biClrUsed =0;
fileh2.biSizeImage =bheight*bwidth1*3;
fileh2.biXPelsPerMeter=0;
fileh2.biYPelsPerMeter=0;
fileh.bfOffBits =sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
fileh.bfSize =fileh.bfOffBits+bheight*bwidth1*3;
fileh.bfReserved1 =0;
delete RedImage;
delete GreenImage;
delete BlueImage;
LoadImage =1;
OpenImageFile();
  GetAllPixelValue();
  CloseImageFile(); UpdateAllViews( NULL );
}
nt CDecisionTreeDoc::ReadImageData(char *name, int mode)
{
CFile gfile; if(gfile.Open(name,CFile::modeRead,NULL)==0)
{
AfxMessageBox("文件打开失败",MB_OK,0); return -1;
}
gfile.Read(&fileh,sizeof(BITMAPFILEHEADER));
gfile.Read(&fileh2,sizeof(BITMAPINFOHEADER));
bwidth=fileh2.biWidth;
bheight=fileh2.biHeight;
boffset=fileh.bfOffBits;
if(int((float)bwidth/4.0)==(float)bwidth/4.0)
bwidth1 =bwidth;
else
bwidth1 =(bwidth/4+1)*4;
gfile.Seek(fileh.bfOffBits,CFile::begin);
if (mode==1)
{
if((RedImage=new unsigned char[(long)bwidth1*(long)bheight])==0)
{
AfxMessageBox("影象空间申请失败",MB_OK,0); return -1;
}
gfile.Read(RedImage,(long)bwidth1*(long)bheight);
}
else if (mode==2)
{
if((GreenImage=new unsigned char[(long)bwidth1*(long)bheight])==0)
{
AfxMessageBox("影象空间申请失败",MB_OK,0); return -1;
}
gfile.Read(GreenImage,(long)bwidth1*(long)bheight);
}
else if (mode==3)
{
if((BlueImage=new unsigned char[(long)bwidth1*(long)bheight])==0)
{
AfxMessageBox("影象空间申请失败",MB_OK,0);
return -1;
}
gfile.Read(BlueImage,(long)bwidth1*(long)bheight);
}
else
return -1;
gfile.Close();
return 0;
}void CDecisionTreeDoc::DisplayImage(CDC *pDC)
{
pDC->SetStretchBltMode(COLORONCOLOR);
::StretchDIBits(pDC->GetSafeHdc(),0,0,bwidth,bheight,0,0,bwidth,bheight,BmpImage,(LPBITMAPINFO)&fileh2,DIB_RGB_COLORS,SRCCOPY);
}