BMP显示

来源:互联网 发布:扫描ip地址软件 编辑:程序博客网 时间:2024/06/01 10:34
if(!file.Open(strFileName, CFile::modeRead))return;BITMAPFILEHEADER bmfHeader;nFileLen = file.GetLength();dwDibSize = nFileLen - sizeof(BITMAPFILEHEADER); //dwDibSize为BMP总大小减去BMP文件头的长度if (m_pDib != NULL) {delete[] m_pDib;m_pDib = NULL;}m_pDib = new unsigned char[dwDibSize]; // 为DIB位图分配内存if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) != sizeof(bmfHeader)) //读文件头return;if (bmfHeader.bfType != ((WORD)('M' <<8) | 'B'))  //判断是否是BMP位图return ;if (file.Read(m_pDib, dwDibSize) != dwDibSize) //读文件头以后的数据return ;m_bmpInfoHeader = (BITMAPINFOHEADER*)m_pDib;lHeight = m_bmpInfoHeader->biHeight; //图像长lWidth = m_bmpInfoHeader->biWidth; //图像宽        lBitCount = m_bmpInfoHeader->biBitCount; //图像位数switch(lBitCount) {case 1:NumColor = 2;break;case 4:NumColor = 16;break;case 8:NumColor = 256;break;case 24:NumColor = 0;break;default:NumColor = 0;break;return;}m_pDibBits = m_pDib + sizeof(BITMAPINFOHEADER) + NumColor * sizeof (RGBQUAD);

m_pDib和m_pDibBits都是BYTE数组指针

然后

CDC *pDC;CRect rect;CWnd *pWnd = GetDlgItem(IDC_STATIC_SHOW);pWnd->GetClientRect(&rect);pDC = pWnd->GetDC();SetStretchBltMode(pDC->m_hDC,HALFTONE);//防止自适应窗口图像显示失真StretchDIBits(pDC->m_hDC,rect.left, rect.top, rect.right, rect.bottom, 0, 0,           lWidth, lHeight, m_pDibBits, (BITMAPINFO*)m_bmpInfoHeader, BI_RGB, SRCCOPY);

在OnPaint里面重载这段代码就行了

原创粉丝点击