正文

VC界面显示图片(BMP) 2007-05-18 12:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/12567/25973.html

分享到:

 VC界面显示图片(BMP) 1、通过点击浏览按钮选择BMP图像文件点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。关键代码如下:void CShowBMPDlg::OnButtonSelectiamge() ...{    char  szFilter[] = "BMP Files (*.bmp)|*.bmp|All Files (*.*)|*.*||";    CFileDialog dlg( TRUE,"BMP",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter );    if(dlg.DoModal() == IDOK)    ...{        strPathName = dlg.GetPathName();                LoadShowBMPFile(strPathName);            m_hBitmap = BufferToHBITMAP();            Invalidate();    }}2、加载BMP文件到内存通过得到的BMP图像文件路径目录,加载BMP图像文件到内存中。关键代码如下:BOOL CShowBMPDlg::LoadShowBMPFile(const char *pPathname)...{    CFile file;    if( !file.Open( pPathname, CFile::modeRead) )        return FALSE;    DWORD            m_nFileLen;    m_nFileLen = file.GetLength();    m_pBMPBuffer = new char[m_nFileLen + 1];    if(!m_pBMPBuffer)        return FALSE;    if(file.Read(m_pBMPBuffer,m_nFileLen) != m_nFileLen)        return FALSE;    return TRUE;} 3、将内存中的BMP文件内容转换到HBITMAP将内存中的BMP文件内容转换成位图句柄。关键代码如下:HBITMAP CShowBMPDlg::BufferToHBITMAP()...{    HBITMAP                hShowBMP;    LPSTR                hDIB,lpBuffer = m_pBMPBuffer;    LPVOID                lpDIBBits;    BITMAPFILEHEADER    bmfHeader;    DWORD                bmfHeaderLen;        bmfHeaderLen = sizeof(bmfHeader);    strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);     if (bmfHeader.bfType != (*(WORD*)"BM")) return NULL;    hDIB = lpBuffer + bmfHeaderLen;    BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;    BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;    m_bmW = bmiHeader.biWidth;    m_bmH = bmiHeader.biHeight;    lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits;    CClientDC dc(this);    hShowBMP = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);    return hShowBMP;}4、在屏幕上显示BMP图像双缓冲实现BMP位图显示在屏幕上。关键代码如下:void CShowBMPDlg::DrawImage(int x, int y, CDC *pDC)...{    HBITMAP OldBitmap;    CDC MemDC;    MemDC.CreateCompatibleDC(pDC);    OldBitmap=(HBITMAP)MemDC.SelectObject(m_hBitmap);     CBitmap* pBitmap = CBitmap::FromHandle(m_hBitmap);    if(m_bmW == 0 || m_bmH == 0)        return ;    CRect rect;    GetClientRect(&rect);        /**//*str.Format("%d %d", rect.Width(),rect.Height());    MessageBox(str);*/     pDC->BitBlt(x,y,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);        GetRGB(MemDC);     MemDC.SelectObject(OldBitmap);}

阅读(6279) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册