手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>VB>列表

API实现完美的图片出现效果

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!


Picture2.Cls

nHeight = 3‘小块的高度,即

Stripes = Picture1.Height / nHeight‘总共的小块数目n个

P2 = nHeight

P1 = Picture1.Width

For I = 0 To Picture1.Height Step nHeight

p3 = I

r% = BitBlt(Form1.Picture2.hDC, 0, p3, P1, P2, Form1.Picture1.hDC, 0, p3, &HCC0020)

For j = 1 To 8000 注释:‘等待片刻,图片从上到下出现的时间可以由此调节

Next

Next

明白了以上制作原理以后,图片从下到上、从做到右、从右到左出现的效果也就可以实现了。

二、开门效果

开门效果的制作也是先将Picture1从形式上划分为很多小块a1、a2、a3、…,每块宽度为。如图。

然后利用BitBlt函数先将Picture1中的a0块拷贝到Picture2中的相同位置,等待片刻,再拷贝a1块、a2块、…直到。如果将取得足够小,则人眼看到 Picture2中的图片就是以开门的效果出现的。其程序如下:

Picture2.Cls

nWidth = 3‘小块的宽度,即

Stripes = Picture1.Width / nWidth‘总共的小块数目n个

P2 = Picture1.Height

P1 = nWidth

For I = Picture1.Width / 2 nWidth To 0 Step -nWidth

p3 = I

p4 = Picture1.Width - I

r% = BitBlt(Form1.Picture2.hDC, p3, 0, P1, P2, Form1.Picture1.hDC, p3, 0, &HCC0020)

r% = BitBlt(Form1.Picture2.hDC, p4, 0, P1, P2, Form1.Picture1.hDC, p4, 0, &HCC0020)

For j = 1 To 8000‘等待片刻,图片开门效果出现的时间可以由此调节

Next

Next

根据同样的方法可以制作“上下开门”、“左右关门”、“上下关门”、“从中间向四周扩大”、“从四周向中间缩小”等效果。

三、百叶窗效果

分成几个大块,每个大块分成很多个小块

如图所示,要将Picture1中的图片拷贝到Picture2中,首先将Picture1从形式上划分为很多宽度为的大块,然后再将每一块进一步划分为宽度为的若干小块。

然后利用BitBlt函数先将Picture1中的a1块拷贝到Picture2中的相同位置,再拷贝b1块、c1块、…5却蹋倏奖碼2块、b2块、c2块、…。如果将取得足够小,则人眼看到 Picture2中的图片就是以百叶窗的效果出现的。其程序如下:

Picture2.Cls

nWidth = 3

mWidth = 18

Stripes = Picture1.Width / nWidth

P2 = Picture1.Height

P1 = nWidth

For j = 0 To mWidth Step nWidth

For I = 0 To Picture1.Width nWidth Step mWidth

p3 = I j

r% = BitBlt(Form1.Picture2.hDC, p3, 0, P1, P2, Form1.Picture1.hDC, p3, 0, &HCC0020)

Next

For k = 1 To 200000

Next

Next

根据同样的道理,可以制作上下百叶窗效果。

四、逐段翻开效果

分成几个大块,每个大块分成很多个小块

如图所示,要将Picture1中的图片拷贝到Picture2中,首先将Picture1从形式上划分为很多宽度为的大块,然后再将每一块进一步划分为宽度为的若干小块。

然后利用BitBlt函数先将Picture1中的a0块拷贝到Picture2中的相同位置,再拷贝a1块、a2块、…。等待片刻,再拷贝b0块、b1块、b2块、…。如果将取得足够小,则人眼看到 Picture2中的图片就是以逐段翻开的效果出现的。其程序如下:

stripewidth = 40

Stripes = Picture1.ScaleWidth / stripewidth

P2 = Picture1.ScaleHeight

For i = 0 To (Stripes - 1) / 10 Step 1

For m = 0 To stripewidth / 2

r% = BitBlt(Picture2.hDC, P1 m stripewidth / 2 i * stripewidth, 0, 2, P2, Picture1.hDC, P1 m stripewidth / 2 i * stripewidth, 0, &HCC0020)

r% = BitBlt(Picture2.hDC, P1 - m stripewidth / 2 i * stripewidth, 0, 2, P2, Picture1.hDC, P1 - m stripewidth / 2 i * stripewidth, 0, &HCC0020)

For j = 1 To 10000

Next j

Next m

For j = 1 To 50000

Next j

Next i

五、逐段进入效果

将Picture1从形式上划分为很多宽度为的大块

a1块在Picture2中的位置

a1块在Picture2中的位置前进了

逐段进入效果的制作要麻烦一些,要将Picture1中的图片拷贝到Picture2中,首先将Picture1从形式上划分为很多宽度为的大块a1、a2、a3、…。

利用BitBlt函数先将Picture1中的a1块拷贝到Picture2中的最右边,如图(2),等待片刻,将Picture2中的图片清除掉,然后将Picture1中的a1块拷贝到Picture2中的距离最右边处。如图(3),a1块好象向左前进了,如此下去,就可以实现a1块从左进入,使用同样的办法使a2块、a3块、…依次逐渐进入。这样,人眼看到 Picture2中的图片就是以逐段进入的效果出现的。其程序如下:

Picture2.Cls

nWidth = 50

Stripes = Picture1.Width / nWidth

P2 = Picture1.Height

P1 = nWidth

For I = 0 To Picture1.Width nWidth Step nWidth

p3 = I

For k = Picture1.Width To I Step -nWidth

p4 = k

Picture2.Cls

r% = BitBlt(Picture2.hDC, 0, 0, I, P2, Picture1.hDC, 0, 0, &HCC0020)

r% = BitBlt(Picture2.hDC, p4, 0, P1, P2, Picture1.hDC, p3, 0, &HCC0020)

For j = 1 To 300000 注释:Wait For A While

Next j

Next k

Next i

   必须指出,以上逐段进入的效果有一个明显的缺点,就是有“闪动”现象。产生这种现象的原因是由于程序不停地删除、不停地拷贝同一块造成的。如果不删除而只拷贝,则不会出现“闪动”现象。

六、马赛克效果

   马赛克效果在很多软件中都有应用,其原理是将Picture1从形式上划分为很多小块,如图所示,一共有n块。然后利用BitBlt函数将Picture1中的小块随机地拷贝到Picture2中的相同位置处。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!