visual c++中图形特技

visual c++中图形特技

ID:20301895

大小:34.00 KB

页数:9页

时间:2018-10-12

visual c++中图形特技_第1页
visual c++中图形特技_第2页
visual c++中图形特技_第3页
visual c++中图形特技_第4页
visual c++中图形特技_第5页
资源描述:

《visual c++中图形特技》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Visual C++中的图形特技随着计算机信息表示及实现的多媒体化,在许多学习软件、游戏软件,以及多媒体课件制作软件中,经常使用各种图形显示技巧,如图形的推拉、交错、雨滴状、百页窗、积木随机堆叠等显示模式。这样使画面变得更为生动活泼,更能吸引用户,也为更好地发挥软件的功能奠定了基础。本文就VisualC++6.0中实现图形的各种显示技巧的原理及具体方法做些探讨。基本原理在VisualC++6.0中,显示位图的方法及过程如下:1.显示程序资源中的位图(位图的所有数据均存在于可执行文件中)(1)从资源中装入位图●定义位图对象数据成员CBi

2、tmapm_Bitmap;●调用CBitmap成员函数LoadBitmap(),如m_Bitmap.LoadBitmap(IDB_BITMAP1);●传入LoadBitmap的参数是位图在图形编辑器中生成或从位图文件中引入时赋予的识别符。(2)生成与位图相联系的内存设备情境对象CDCMemDC;MemDC.CreateCompatibleDC(NULL);MemDC.SelectObject(&m_Bitmap);(3)显示位图CClientDCClientDC(this);BITMAPBM;m_Bitmap.GetObject(si

3、zeof(BM),&BM);ClientDC.BitBlt(X,Y,//目标设备逻辑横、纵坐标BM.bmWidth,BM.bmHeight,//显示位图的像素宽、高度&MemDC,//待显示位图数据的设备情境对象0,0,//源数据中的横、纵坐标SRCCOPY);//位操作方式这种方法显示位图速度快,但不是很灵活,而且会使可执行文件增大。2.显示独立文件方式的位图(位图的所有数据独立于可执行文件)HBITMAP*hBitmap;//定义位图对象句柄BITMAPBM;CDCMemDC;CClientDCClientDC(this);Mem

4、DC.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(……)//使用格式与方法一同这种

5、方法显示位图速度较之前一种慢了一点,但其灵活性较大,可以任意变换位图文件,而无需重新编译源程序,也减小了可执行文件的大小。实现方法下面介绍各种图形显示技巧的具体实现原理及方法。以下所有程序算法的实现均可放在视类(CView,也可视自己的需要放在其他类)中处理,且有必要进行如下的相关操作:增加如下类成员变量:BITMAPm_Bm;//保存位图的宽、高度等数据HBITMAP*m_hBitmap;//保存位图数据句柄CDCm_MemDC;//内存设备情境对象在类构造函数中加入如下代码:m_MemDC.CreateCompatibleDC(N

6、ULL);//产生内存设备情境对象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)中的位图数据拆分成奇、偶扫描线两部分,其中奇数

7、条扫描线由上往下移动,偶数条扫描线则由下往上移动,且两者同时进行。屏幕上的效果为分别由上下两端出现的较淡栅栏图形,逐渐相互靠近,直至整个位图完全清楚。垂直交错效果的实现原理与之类似。程序算法:inti,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),/

8、/源位图的起始横、纵坐标m_Bm.bmWidth,1,//源位图的像素宽、高度SRCCOPY);ClientDC.StretchBlt(//偶数,由下至上0,m_Bm.bmHeight-j,//目标设备逻辑横、纵坐标m_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。