VC/MFC读取BMP文件并显示
来源:互联网 发布:手机mp3变速软件 编辑:程序博客网 时间:2024/05/01 00:02
自己写过的代码,留作保存,以后不会忘了
先声明几个变量
BYTE * pBMPDataBuf;//BMP数据bufBITMAPFILEHEADER BmpHeader;//BMP图像文件头BITMAPINFO BmpInfo;//BMP图像信息结构RGBQUAD * pRGBQUAD;//调色板DWORD dwBmpDataSize;//BMP数据区大小
在LoadBMPFile函数中读取文件数据
BOOL CBMPControl::LoadBmpFile(CFile& file){//读取bmp文件头file.Read(&BmpHeader,sizeof(BITMAPFILEHEADER));//判断BMP类型if (BmpHeader.bfType != DIB_MARKER)// 判断是否是DIB对象{strBMPError = "不是BMP文件类型";return FALSE;}//读取bmp信息头和第一个颜色表file.Read(&BmpInfo,sizeof(BITMAPINFO));int iBitNum = GetRGBQUADNum(BmpInfo.bmiHeader.biBitCount);//获得图像位数,确定分配颜色表使用if (iBitNum!=0)//不是黑白,16色,256色图片,则没有颜色表{file.Seek(54,CFile::begin);//从文件开始向后移动54个字节,跳过文件头结构和信息头结构pRGBQUAD = new RGBQUAD[iBitNum];file.Read(pRGBQUAD,sizeof(RGBQUAD)*iBitNum);}//移动到BMP数据区指针file.Seek(BmpHeader.bfOffBits,CFile::begin);dwBmpDataSize = BmpInfo.bmiHeader.biSizeImage;//图像数据大小pBMPDataBuf = new BYTE[dwBmpDataSize];file.Read(pBMPDataBuf,BmpInfo.bmiHeader.biSizeImage);return TRUE;}
#define DIB_MARKER ((WORD) ('M' << 8) | 'B')只是定义的一个宏,判断是否为BMP格式的文件,具体详细的自己搜索吧GetRGBQUADNum这个函数只是根据位数返回颜色数,24位图和32位图是没有颜色表的
int XXXXXX::GetRGBQUADNum(int ibit){int iNum=0;switch(ibit){case 1:iNum = 2;break;case 4:iNum = 16;break;case 8:iNum = 256;break;default:iNum = 0;}return iNum;}
好了,读到了数据,就显示吧,我只是简单的进行了自动拉伸显示,如果想用其他显示方式,自己再研究吧
BOOL XXXXXXX::DrawBMPAutoRange(CDC *pDC,CRect*rect)//绘制BMP{SetStretchBltMode(pDC->m_hDC,HALFTONE);::StretchDIBits(pDC->m_hDC,// 设备环境句柄0, //目标X坐标0, // 目标Y坐标rect->Width(), // 目标宽度rect->Height(), // 目标高度0, // 源X坐标0, // 源Y坐标BmpInfo.bmiHeader.biWidth, // 源宽度BmpInfo.bmiHeader.biHeight, // 源高度pBMPDataBuf, // 指向dib像素的指针&BmpInfo, // 指向位图信息结构的指针DIB_RGB_COLORS, // 使用的颜色数目//DIB_PAL_COLORS,SRCCOPY); // 光栅操作类型/*SetDIBitsToDevice*/return TRUE;}
- VC/MFC读取BMP文件并显示
- VC 创建BMP文件并显示
- 【OPENGL】读取并显示BMP文件
- 介绍一下MFC对话框工程读取BMP文件并显示的例子
- VC打开并缩放显示位图(.BMP)文件的方法
- mfc显示非BMP文件
- BMP文件的读取显示
- VC MFC界面上显示BMP图片
- vc加载bmp位图并显示
- 读取BMP图片并显示到窗口.
- VC打开bmp文件,读取信息
- 如何把位图读入内存中并显示?实现从打包文件中读取bmp文件并显示!
- MFC读取图片并显示
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- 读取BMP文件并显示出来(C++实现)
- U-Boot启动过程--详细版的完全分析
- 2012总结
- 用display做导航栏
- UVa 11732 trie好题
- 编程学习(四)----c++总体概览(一)
- VC/MFC读取BMP文件并显示
- (转)Android通过SharedPreferences实现数据库访问共享
- cocos2d-x初探学习笔记(6)--场景间切换效果
- 自动提取人脸关键特征点
- 工作总结
- 倒排索引
- Jsp+Servlet+JDBC 登录
- placement new
- 倒排索引