通过文件-打开-加载显示图片!为什么显示是黑的!急解决送分!
BOOL CBMPDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
CFile file;
CFileException er;
BITMAPFILEHEADER bitfilehead;
BITMAPINFOHEADER bitinfohead;
if(!file.Open(lpszPathName,CFile::modeRead|CFile::typeBinary|CFile::shareDenyWrite,&er))
{
ReportSaveLoadException(lpszPathName,&er,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);
return FALSE;
}
if (!file.Read(&bitfilehead,sizeof(BITMAPFILEHEADER)))
{
AfxMessageBox("读取到内存失败");
return FALSE;
}
if (bitfilehead.bfType!=((WORD)('M'<<8)|'B'))
return FALSE;
if(bitfilehead.bfSize!=file.GetLength())
return FALSE;
if(file.Read((LPSTR)&bitinfohead,sizeof(bitinfohead))!=sizeof(bitinfohead))
return FALSE;
int h=bitinfohead.biHeight;
int w=bitinfohead.biWidth;
file.SeekToBegin();
file.Read(&bitfilehead,sizeof(BITMAPFILEHEADER));
UINT bmplen=(UINT)bitfilehead.bfOffBits-sizeof(BITMAPFILEHEADER);
bitinfo=(LPBITMAPINFO)new BYTE[bmplen];
file.Read((LPVOID)bitinfo,bmplen);
if ((*(LPDWORD)(bitinfo))!=sizeof(BITMAPINFOHEADER))
return FALSE;
DWORD dwbitlen=bitfilehead.bfSize-bitfilehead.bfOffBits;
lpsrcbit=new BYTE[dwbitlen];
file.ReadHuge(lpsrcbit,dwbitlen);
file.Close();
HBITMAP bitmap=::CreateDIBSection(NULL,(BITMAPINFO*)bitinfo,DIB_RGB_COLORS,&lpsrcbit
,NULL,0);
if (bitmap==NULL)
{AfxMessageBox("CreateDIBsentn") ;return FALSE;
}
m_bitmap=new CBitmap;
m_bitmap->Attach(bitmap);
nWidth=bitinfo->bmiHeader.biWidth;
nHeight=bitinfo->bmiHeader.biHeight;
return TRUE;
}
在头文件中!定义的变量!
CBitmap *m_bitmap;
LPBITMAPINFO bitinfo;
LPVOID lpsrcbit;
void CBMPView::OnDraw(CDC* pDC)
{
CBMPDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if ( !pDoc->m_bitmap)
{
return;
}
CDC memdc;
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(pDoc->m_bitmap);
pDC->BitBlt(0,0,pDoc->nWidth,pDoc->nHeight,&memdc,0,0,SRCCOPY);
/* ::StretchDIBits(pDC->GetSafeHdc(),0,0,pDoc->nWidth,pDoc->nHeight,0,0,pDoc->nWidth,pDoc->nHeight,
pDoc->lpsrcbit,(LPBITMAPINFO)pDoc->bitinfo,DIB_RGB_COLORS,SRCCOPY);
}
有高手帮看看 解决送分马上1