BMP显示

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里面重载这段代码就行了

你可能感兴趣的:(null,BI,delete,byte)