(转载)在程序中显示位图

引自:(http://www.vczx.com/article/show.php?id=87

(另:原文中还有实现各种效果的 方法实现)

主要是画在 view 的 OnDraw()中。

1. 显示程序资源中的位图(位图的所有数据均存在于可执行文件中)

(1)从资源中装入位图

● 定义位图对象数据成员CBitmap m_Bitmap;

● 调用CBitmap成员函数LoadBitmap(),如m_Bitmap.LoadBitmap(IDB_BITMAP1);

● 传入LoadBitmap的参数是位图在图形编辑器中生成或从位图文件中引入时赋予的识别符。

(2)生成与位图相联系的内存设备情境对象

CDC MemDC;

MemDC.CreateCompatibleDC(NULL);

MemDC.SelectObject(&m_Bitmap);

(3)显示位图

CClientDC ClientDC(this);

BITMAP BM;

m_Bitmap.GetObject(sizeof(BM),&BM);

ClientDC.BitBlt

( X,Y, //目标设备逻辑横、纵坐标

BM.bmWidth, BM.bmHeight, //显示位图的像素宽、高度

&MemDC,

//待显示位图数据的设备情境对象

0,0, //源数据中的横、纵坐标

SRCCOPY); //位操作方式

这种方法显示位图速度快,但不是很灵活,而且会使可执行文件增大。

2. 显示独立文件方式的位图(位图的所有数据独立于可执行文件)

HBITMAP *hBitmap; //定义位图对象句柄

BITMAP BM;

CDC MemDC;

CClientDC ClientDC(this);

MemDC.CreateCompatibleDC(&ClientDC);

hBitmap=(HBITMAP*):: LoadImage

( AfxGetInstanceHandle(),

//取得应用程序句柄

“demo1.bmp”,

//位图文件名

IMAGE_BITMAP,

//类型为Windows位图

0,0,

LR_LOADFROMFILE);

//从文件中取位图数据

MemDC.SelectObject(hBitmap);

:: GetObject(hBitmap,sizeof(BM),&BM);

ClientDC.BitBlt(……)

//使用格式与方法一同

这种方法显示位图速度较之前一种慢了一点,但其灵活性较大,可以任意变换位图文件,而无需重新编译源程序, 也减小了可执行文件的大小。

实现方法

下面介绍各种图形显示技巧的具体实现原理及方法。以下所有程序算法的实现均可放在视类(CView,也可视自己的需要放在其他类)中处理,且有必要进行如下的相关操作:

增加如下类成员变量:

BITMAP m_Bm;

//保存位图的宽、高度等数据

HBITMAP *m_hBitmap;

//保存位图数据句柄

CDC m_MemDC; //内存设备情境对象

在类构造函数中加入如下代码:

m_MemDC.CreateCompatibleDC(NULL); //产生内存设备情境对象

m_hBitmap=(HBITMAP *)::LoadImage(

//从文件中装入位图数据

AfxGetInstanceHandle(),

“demo1.bmp”,

IMAGE_BITMAP,

0,0,

LR_LOADFROMFILE );

m_MemDC.SelectObject(m_hBitmap); //将位图选入内存设备情境对象

::GetObject(m_hBitmap,sizeof(m_Bm),&m_Bm);

HBITMAP *hBitmap; //定义位图对象句柄

BITMAP BM;

CDC MemDC;

CClientDC ClientDC(this);

MemDC.CreateCompatibleDC(&ClientDC);

hBitmap=(HBITMAP*):: LoadImage

( AfxGetInstanceHandle(),

//取得应用程序句柄

“demo1.bmp”,

//位图文件名

IMAGE_BITMAP,

//类型为Windows位图

0,0,

LR_LOADFROMFILE);

//从文件中取位图数据

MemDC.SelectObject(hBitmap);

:: GetObject(hBitmap,sizeof(BM),&BM);

ClientDC.BitBlt(……)

//使用格式与方法一同

这种方法显示位图速度较之前一种慢了一点,但其灵活性较大,可以任意变换位图文件,而无需重新编译源程序, 也减小了可执行文件的大小。

实现方法

下面介绍各种图形显示技巧的具体实现原理及方法。以下所有程序算法的实现均可放在视类(CView,也可视自己的需要放在其他类)中处理,且有必要进行如下的相关操作:

增加如下类成员变量:

BITMAP m_Bm;

//保存位图的宽、高度等数据

HBITMAP *m_hBitmap;

//保存位图数据句柄

CDC m_MemDC; //内存设备情境对象

在类构造函数中加入如下代码:

m_MemDC.CreateCompatibleDC(NULL); //产生内存设备情境对象

m_hBitmap=(HBITMAP *)::LoadImage(

//从文件中装入位图数据

AfxGetInstanceHandle(),

“demo1.bmp”,

IMAGE_BITMAP,

0,0,

LR_LOADFROMFILE );

m_MemDC.SelectObject(m_hBitmap); //将位图选入内存设备情境对象

::GetObject(m_hBitmap,sizeof(m_Bm),&m_Bm);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值