动态显示BMP位图

原创 2012年03月22日 21:42:13
截个图:

在函数中加入以下代码:

 

CFileDialog FileDlg(TRUE, "BMP", NULL, //定义文件对话框
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "位图文件(*.BMP)|*.BMP||");
if(FileDlg.DoModal() != IDOK) //打开文件对话框
return ;
CString pathname = FileDlg.GetPathName();//获取选中文件的路径
CFile file; //定义一个文件变量
if(!file.Open(pathname, CFile::modeRead) )//以制度的方式打开文件
return ;
DWORD FileLen = file.GetLength();//获取文件的长度
char *pBMPBuffer = new char[FileLen + 1];//开辟符数组
if(!pBMPBuffer) //如果控件不够大
return ;
if(file.ReadHuge(pBMPBuffer,FileLen) != FileLen)//读取文件保存在字符数组中
return ;
LPSTR hDIB,lpBuffer = pBMPBuffer;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;//保存bmp文件头的信息
DWORD bmfHeaderLen;//保存文件头的长度

bmfHeaderLen = sizeof(bmfHeader);//读取文件头的长度
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);//文件的赋值
if (bmfHeader.bfType != (*(WORD*)"BM"))//如果文件类型不对
return ;
hDIB = lpBuffer + bmfHeaderLen; //将指针移动到文件头的后面
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ;//读取bmp文件的数据
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits;
CClientDC dc(this);
m_hPhotoBitmap = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS);

 

CStatic *pStaic = (CStatic*)GetDlgItem(IDC_PHOTO);//获取ID为IDC_PHOTO控件的指针
CPaintDC dc(this); // device context for painting
CBitmap bmp; //定义位图变量
bmp.Attach(m_hPhotoBitmap); 
BITMAP bm; //定义一个位图结构
bmp.GetBitmap(&bm); 
CDC dcMem; 
dcMem.CreateCompatibleDC(GetDC()); //创建一个兼容的DC
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(bmp); //将位图选入设备环境类
CRect lRect; //定义一个区域
pStaic->GetClientRect(&lRect); //获取控件的客户区域
lRect.NormalizeRect(); 
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(), 
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //显示位图 
dcMem.SelectObject(&poldBitmap); //将原有的句柄选入设备环境


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

MFC实现静态和动态显示bmp图片

代码下载路径:http://download.csdn.net/detail/dafenqie/9690529 1、通过LoadImage函数静态显示一个bmp文件: 1)增加一个pictur...
  • dafenqie
  • dafenqie
  • 2016年11月23日 09:54
  • 1282

BMP位图结构很详细的说明和…

原文地址:BMP位图结构很详细的说明和示例作者:立志转自:http://www.madio.net/tool/thread-1995-1-1.html 一、文件格式 Bmp文件是非常常用的位图文件,...
  • fandongguang0702
  • fandongguang0702
  • 2016年06月26日 10:45
  • 1602

(学习笔记1)BMP位图的组成

BMP图像文件 BMP位图文件格式是Windows系统交换图像数据的一种标准图像文件存储格式,在Windows环境下运行的所有图像处理软件都支持这种格式。Windows 3.0以前的BMP位图文件格...
  • caicai_zju
  • caicai_zju
  • 2016年03月29日 20:03
  • 1227

(学习笔记3)BMP位图的读取与显示

在(学习笔记2)中,我们已经详细说明如何去创建MFC。在这节中,主要解决BMP位图照片的读取和显示问题。我们新建一个工程demo1。创建步骤请看(学习笔记2)中详细说明。 创建成功后,如下图所示: ...
  • caicai_zju
  • caicai_zju
  • 2016年04月06日 10:48
  • 9602

使用C++读取8位BMP位图

使用C++读取8位BMP位图一、 基础知识 微软的图像库关于位图的数据结构BITMAPFILEHEADER、BITMAPINFOHEADER 位图存储时候的四字节对齐。 调色板的理解 二、八位图片的读...
  • yesejiangnan
  • yesejiangnan
  • 2015年05月26日 10:58
  • 2665

位图文件(BMP)格式以及Linux下C程序实现

说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP。由于没有经过任何的压缩,故BMP图 片往往很大。在Windows下,任何格式的图片文件都要...
  • niepangu
  • niepangu
  • 2015年12月27日 19:43
  • 667

位图(bmp)文件格式分析

位图(bmp)文件格式分析 作者:深蓝(由博主分享) 一、什么是位图 计算机能以位图和矢量图格式显示图像。 1、位图(Bitmap): 图像又称点阵图或光栅图,它使用我们称为像素(象素,Pi...
  • qingchuwudi
  • qingchuwudi
  • 2014年05月14日 11:42
  • 3245

SetPixel去显示BMP图

最近学习一下图形的知识,一直对位图不太了解,自己开发当中一般都是直接用CIMage 或者别的图形类来进行图形处理,一些本质东西不知道,总感觉比较虚。因为在一些特殊的环境是需要这些知识。 知识引用: ...
  • XiaoZuoay
  • XiaoZuoay
  • 2015年04月27日 17:35
  • 666

BMP位图文件的4个组成部分

bmp文件大体上分成四个部分。 位图文件头BITMAPFILEHEADER 、 位图信息头BITMAPINFOHEADER 、 调色板Palette 、 实际的位图数据ImageDate 第...
  • qq_31099571
  • qq_31099571
  • 2016年06月22日 23:30
  • 884

BMP位图与调色板分析

调色板(color table)是单色、16色和256色图像文件所特有的,相对应的调色板大小是2、16和256,调色板以4字节为单位,每4个字节存放一个颜色值,图像的数据是指向调色板的索引。  ...
  • szlcw1
  • szlcw1
  • 2013年11月22日 21:37
  • 1037
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态显示BMP位图
举报原因:
原因补充:

(最多只允许输入30个字)