读取8位raw图像数据,然后自己建立bmp头文件,最后显示出来,我的做法为什么行不通呢?
nkzyf 2005-06-20 01:24:36 图像是raw的8位 320*237 灰度图象,下面是个部分的代码
读取raw数据:
LPCTSTR lpszFilter="BMP Files(*.bmp)|*.bmp|任何文件|*.*||";
CFileDialog dlg1(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL);
CString filename;
CFile file;
if (dlg1.DoModal()==IDOK)
{
filename=dlg1.GetPathName();
if (file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL)==0)
{
//读取文件失败
AfxMessageBox("不能打开文件",MB_OK,0);
return;
}
}
建立bmp文件头:
BITMAPINFOHEADER bi;
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=320;
bi.biHeight=237;
bi.biPlanes=0;
bi.biBitCount=8;
bi.biCompression=BI_RGB;
bi.biSizeImage=(bi.biWidth*bi.biBitCount+31)/32*4*bi.biHeight;
bi.biXPelsPerMeter=0;
bi.biYPelsPerMeter=0;
bi.biClrUsed=0;
bi.biClrImportant=0;
pbi=(BITMAPINFO *)malloc(sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD) );
pbi->bmiHeader=bi;
//设置调色板信息
for (int i=0;i<255;i++)
{
pbi->bmiColors[i].rgbBlue=i;
pbi->bmiColors[i].rgbGreen=i;
pbi->bmiColors[i].rgbRed=i;
pbi->bmiColors[i].rgbReserved=0;
}
//lpBuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,bi.biSizeImage);
lpBuf=(BYTE*)malloc(75840);
//读取图像数据
file.Read(lpBuf,75840);
file.Close;
flag=1;
显示: SetDIBitsToDevice(dc.m_hDC,
10,
10,
pDoc->bi.biWidth,
pDoc->bi.biHeight,
0,
0,
0,
pDoc->bi.biHeight,
pDoc->lpBuf,
pDoc->pbi,
DIB_RGB_COLORS
);