WEB开发网
开发学院软件开发VC Visual C++中的图形特技 阅读

Visual C++中的图形特技

 2007-03-21 21:28:50 来源:WEB开发网   
核心提示: 这种方法显示位图速度较之前一种慢了一点,但其灵活性较大,Visual C++中的图形特技(2),可以任意变换位图文件,而无需重新编译源程序, 也减小了可执行文件的大小,由下至上0,m_Bm.bmHeight-j,//目标设备逻辑横、纵坐标m_Bm.bmWidth,实现方法下面介绍各种图形显

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

实现方法

下面介绍各种图形显示技巧的具体实现原理及方法。以下所有程序算法的实现均可放在视类(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);

1. 水平交错效果

原理:将内存设备情境对象(如MemDC)中的位图数据拆分成奇、偶扫描线两部分,其中奇数条扫描线由上往下移动,偶数条扫描线则由下往上移动,且两者同时进行。屏幕上的效果为分别由上下两端出现的较淡栅栏图形,逐渐相互靠近,直至整个位图完全清楚。垂直交错效果的实现原理与之类似。

程序算法:

int i,j;
for ( i=0; i<=m_Bm.bmHeight; i+=2 )
{j = i;
while ( j>0 )
{ClientDC.StretchBlt(
//奇数,由上至下
0,j-1,
//目标设备逻辑横、纵坐标
m_Bm.bmWidth,1,
//显示位图的像素宽、高度
&m_MemDC,
//源位图设备情境对象
0,m_Bm.bmHeight-(i-j-1),
//源位图的起始横、纵坐标
m_Bm.bmWidth,1,
//源位图的像素宽、高度
SRCCOPY);
ClientDC.StretchBlt(
//偶数,由下至上
0,m_Bm.bmHeight-j,
//目标设备逻辑横、纵坐标
m_Bm.bmWidth,1,
//显示位图的像素宽、高度
&m_MemDC,
//源位图设备情境对象
0,i-j,
//源位图的起始横、纵坐标
m_Bm.bmWidth,1,
//源位图的像素宽、高度
SRCCOPY);
j-=2; }
// while ( j>0 )
Sleep(10);
}
//for ( i=0; i<=m_Bm.bmHeight; i+ =2 )

Tags:Visual 图形 特技

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接