MFC导入并显示BMP图片功能实现

来源:互联网 发布:安装打印机用什么端口 编辑:程序博客网 时间:2024/05/17 07:56

位图资源bmp的使用,需要经过下面几个步骤

1.把位图资源载入位图对象

为了保存位图信息及对位图进行处理,MFC提供了一个位图类CBitmap,其右两个向CBitmap类对象装载位图文件信息的成员函数。

BOOL LoadBitmap(LPCTSTR lpszResoutceName);

BOOL LoadBitmap(UNIT nIDResource);

其中,参数lpszResoutceName为资源名称,而nIDResource为资源的表示.

这样,为了使用位图,则需要先定义一个位图类的对象,然后用上面的任意一个成员函数把位图装载到对象中.例如,下面的代码

CBitmap m_Bmp;                     // 定义位图对象

m_Bmp.LoadBitmap(IDB_BITMAP);       //表示为IDB_BITMAP的位图装入对象

 

2.获得位图信息

为了处理位图,CBitmap类对象可以用成员函数:

int GetBitmap(BITMAP*  pBitMap);来获得位图的各种信息.在调用了上述的函数之后,位图的信息保存在BITMAP结构类型的变量pBitMap中,BITMAP是windows定义的一个专门为存放位图信息的结构.

 

3.把位图选入内存设备环境.

为了便于在内存中对位图进行一些绘图操作,位图不是直接被选入显示设备的DC,而是要先选入内存设备DC.即先要用函数CreateCompatibleDC()创建一个合适的内存设备环境.

CDC MemDC;             //定义设备环境对象

MemDC.CreateCompatibleDC(NULL);        //创建内存设备环境

然后,把位图对象选入内存设备环境.

MemDC.SelectObject(&m_Bmp);

 

4.显示位图

为了在显示设备上显示位图,需要调用CDC类的成员函数BitBlt(),把位图从内存设备环境复制到指定的设备环境(例如,显示器)中,BitBlt()函数的原型为:

BOOl BitBlt(int x,int y , int nWidth, int nHeight,

CDC* pScrDC, int xSrc, int ySrc, DWARD dwRop)

 

 

使用位图资源的实例.

(1)用MFC AppWizard创建一个名称为*** 工程

(2)随意添加一个bmp的图像文件到工程的res文件夹中,并将图像引入到工程中,如图

(原) <wbr>MFC导入并显示BMP图片功能实现

(3)在文档类声明中,声明如下对象和数据成员.

// 属性
public:
 
CBitmap m_Bitmap;
 
int m_nWidth;
 
int m_nHeight;

(4)在文档类的构造函数中装载位图和获得位图的尺寸.

CMy006Doc::CMy006Doc()
{
 
// TODO: 在此添加一次性构造代码
 
BITMAP BM;
 
m_Bitmap.LoadBitmap(IDB_BITMAP1);
 
m_Bitmap.GetBitmap(&BM);
 
m_nWidth = BM.bmWidth;
 
m_nHeight = BM.bmHeight;

}

 

(5)在视图类的OnDraw函数中,显示位图

void CMy006View::OnDraw(CDC* pDC)// 注意此处,默认情况下 pDC是被注释掉的,我都被害惨了..
{
 
CMy006Doc* pDoc = GetDocument();
 
ASSERT_VALID(pDoc);

//=======================================================================
 
CDC MemDC;
 
MemDC.CreateCompatibleDC(NULL);
 
MemDC.SelectObject(pDoc->m_Bitmap);
 
pDC->BitBlt(0,0,pDoc->m_nWidth,pDoc->m_nHeight,&MemDC,0,0,SRCCOPY);
//=======================================================================

 // TODO: 在此处为本机数据添加绘制代码
}

原创粉丝点击