四、设计举例
笔者设计的动画特效包括图片的逐渐放大和图片的翻转两大功能。
我们在窗口上放一个tab控件,在tab控件上分图象放大与图象翻转两个tab标签页。
在图象放大tab标签页,有一单行编辑器〔显示选择图片的路径与名称〕、一个picture控件、一个选择图片按钮〔用于选择显示的图片〕,另外就是从左上向右下、从左下向右上、从右上向左下、从右下向左上、从左向右、从右向左、从上向下、从下向上、从中央向四周九个功能按钮。
在图片翻转tab标签页上,有三个单行编辑器〔显示选择的背景图片、正面图片、背面图片的路径与名称〕、一个选择背景图片按钮、一个选择正面图片按钮、一个选择背面图片按钮、一个picture控件、一个翻转按钮。
在这里假定窗口上picture控件的宽为width,高为height。
1. 图片逐渐放大
将要显示的图片从小到大依次延迟复制到picture控件中,直到占据整个控件为止。
以从左上角向右下角放大为例:先将要显示的图片放入内存DC(设备环境)中,再依次延时将尺寸为1/8 width *1/8 height,2/8 width *2/8 height,3/8 width *3/8 height,4/8 width *4/8 height,5/8 width *5/8 height,6/8 width *6/8 height,7/8 width *7/8 height,整个控件大小的8幅图片复制到picture控件DC中即可。代码如下:
int i,i1,dx,dy,pixelwidth,pixelheight,xz,yz,div,mode uint hdc,hpicture ulong scrcopy,hmdc string picname div=8//图片描绘的次数 mode=16//代表从指定的文件装入图片 p_2.picturename="" picname=trim(sle_1.text)//sle_1.text中为要显示的图片的文件名 scrcopy=13369376//代表图片转移时的操作方式为覆盖 pixelwidth=UnitsToPixels(p_2.width,XUnitsToPixels!)//将picture控件在pb下的宽度转换为以象素为单位的宽度 pixelheight=UnitsToPixels(p_2.height,yUnitsToPixels!)// 将picture控件在pb下的高度转换为以象素为单位的高度 dx=pixelwidth/div dy=pixelheight/div hdc=GetDC(handle(p_2))//取得p_2控件的DC hpicture=LoadImageA(0,picname,0,pixelwidth,pixelheight,mode)//将图片以宽度pixelwidth高度pixelheight的尺寸装入内存 hmdc=CreateCompatibleDC(hdc)//创建与hdc兼容的内存设备描述表hmdc SelectObject(hmdc,hpicture)//将位图对象选入hmdc for i=1 to div xz=0 yz=0 StretchBlt(hdc,xz,yz,dx*i,dy*i,hmdc,0,0,pixelwidth,pixelheight,scrcopy)//将左上角坐标为〔0,0〕,宽度为pixelwidth,高度为pixelheight的hmdc的图象转移到左上角坐标为〔xz,yz〕宽度为dx*I, 高度为dy*I的hdc中 for i1=1 to 20000//用于延迟时间 next next ReleaseDC(0,hdc) DeleteDC(hmdc) DeleteObject(hpicture)
p_2.picturename=picname//注意此句可防止点击图片时,图象从picture控件中消失 |
其它几种放大方式与此类似,只要注意改变源设备描述表中图象的左上角的坐标、高度、宽度即可。限于篇幅,在此省略。
2. 图片翻转特效
1)将背景图片放入内存DC(hmdc)中,正面图片放入内存DC(hmdc1)中,依次将正面图片以大小为整个控件、7/8 width *7/8 height,6/8 width *6/8 height,5/8 width *5/8 height,4/8 width*4/8 height,3/8 width *3/8 height,2/8 width *2/8 height,1/8 width *1/8 height、零尺寸覆盖到存放背景图片的hmdc中,再从hmdc中复制到picture控件DC中。
2) 将背景图片放入内存DC(hmdc)中,背面图片放入内存DC(hmdc1)中,依次将背面图片以大小为零、1/8 width *1/8 height,2/8 width *2/8 height,3/8 width *3/8 height,4/8 width *4/8 height,5/8 width *5/8 height,6/8 width *6/8 height,7/8 width *7/8 height,整个控件的尺寸覆盖到存放背景图片的hmdc中,再从hmdc中复制到picture控件DC中。
 
2/2 首页 上一页 1 2 |