我现在写了一个打开DICOM图片的程序,打开后,想把图片保存为BMP格式的。
主要的变量:图像数据指针 m_pDibBits_Save  
            BMP图片头信息:BITMAPINFOHEADER *m_pBIH;
            还有一些行数,列数。
然后用int a=StretchDIBits(dc, 10, 0, width, height, 0, 0, m_pBIH->biWidth, m_pBIH->biHeight, m_pDibBits_Save, (BITMAPINFO*)m_pBIH, BI_RGB, SRCCOPY);  就把图像输出到界面上了。我现在就是想把这个图片保存为BMP格式的图片。我保存是成功了,但结构上好像还是有点问题,我构成BMP图片是咱们构成的:文件头(BITMAPFILEHEADER)+ 图片头(BITMAPINFOHEADER)+ 图像数据(m_pDibBits_Save),不知道是我结构组成有问题,还是我一些头文件里的变量赋值有问题?请前辈们帮我看下:我想保存成规范的BMP格式图片。
我的图片头信息赋值:
         m_pBIH->biSize = 40;
         m_pBIH->biWidth = width;
m_pBIH->biHeight = height;
m_pBIH->biPlanes = 1;
m_pBIH->biBitCount = 24;
m_pBIH->biSizeImage = 0;
m_pBIH->biClrUsed = 0;
m_pBIH->biClrImportant = 0;
m_pBIH->biCompression = 0;                            //BI_RGB;
m_pBIH->biXPelsPerMeter = 3780;
m_pBIH->biYPelsPerMeter = 3780;
我的文件头信息赋值:
         m_pB->bfOffBits = 50;
m_pB->bfReserved1=0;
m_pB->bfReserved2=0;
m_pB->bfSize =width*height*3 + 40 + 10;
m_pB->bfType=0x4d42;
保存代码:

         int nSize = sizeof(BITMAPFILEHEADER) + (width*height*3) +40;
BYTE* pBuffer = new BYTE[nSize];
// memcpy(pBuffer,m_pBuffer,nSize);
memcpy(pBuffer,m_pB,sizeof(BITMAPFILEHEADER));
memcpy(pBuffer + sizeof(BITMAPFILEHEADER),m_pBIH,40);
memcpy(pBuffer +sizeof(BITMAPFILEHEADER) +40,m_pDibBits_Save,width*height*3);
CString sFilePathName = "D:\\AF.bmp";
CFile PictureFile;
CFileException e;
if(PictureFile.Open(sFilePathName, CFile::modeWrite |CFile::modeCreate| CFile::typeBinary, &e))
{
PictureFile.Write(pBuffer, nSize) ;
PictureFile.Close();
delete [] pBuffer;
}