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里面重载这段代码就行了
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值