码迷,mamicode.com
首页 > 其他好文 > 详细

BMP文件的读取与显示

时间:2015-07-14 15:44:51      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:bmp   图像读取显示   


1.StretchDIBits函数实现

完成功能:

对话框程序,添加一个按钮,点击按钮后显示图片


(1)设置BYTE*m_pBmpData为类的成员变量,我们要把图片的RGB数据装进去。


(2)按钮的后台代码


void Cbmp_readDlg::OnBnClickedShowbmp()
{
	CFile file;								//定义一个文件对象
	file.Open(CString("C:\\Users\\jian\\Desktop\\z.bmp"), CFile::modeRead);//打开文件
	DWORD  dwLen = file.GetLength();					//获取文件长度
	file.Seek(14, CFile::begin);						//略过位图文件头
	if (m_pBmpData != NULL)
	{
		delete[] m_pBmpData;
		m_pBmpData = NULL;
	}
	m_pBmpData = new BYTE[dwLen - 14];					//为缓冲区分配空间
	file.Read(m_pBmpData, dwLen - 14);					//读取文件数据到缓冲区
	file.Close();								//关闭文件
	OnPaint();
}

(3)重写OnPaint函数


void Cbmp_readDlg::OnPaint()
{
	/*******************分隔线之间的代码自动生成的,不用管************************/
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}

	/*******************分隔线之间的代码自动生成的,不用管。下面是添加的代码************************/
	else
	{
		if (m_pBmpData != NULL)
		{
			BYTE *pHeader = m_pBmpData;			//定义一个临时缓冲区
			BITMAPINFO BitInfo;			        //定义位图信息对象
			memset(&BitInfo, 0, sizeof(BITMAPINFO));	//初始化位图信息对象
			memcpy(&BitInfo, pHeader, sizeof(BITMAPINFO));	//为位图信息对象赋值
			int nWidth = BitInfo.bmiHeader.biWidth;		//获取位图宽度
			int nHeight = BitInfo.bmiHeader.biHeight;	//获取位图高度
			pHeader += 40;					//指向位图数据
			//输出位图信息,这里完成显示
			StretchDIBits(GetDC()->m_hDC, 10, 40, nWidth, nHeight, 0, 0, nWidth, nHeight,
				pHeader, &BitInfo, DIB_RGB_COLORS, SRCCOPY);
		}
		CDialogEx::OnPaint();
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

BMP文件的读取与显示

标签:bmp   图像读取显示   

原文地址:http://blog.csdn.net/u014568921/article/details/46876789

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!