六、马赛克效果
马赛克效果在很多软件中都有应用,其原理是将Picture1从形式上划分为很多小块,如图所示,一共有n块。然后利用BitBlt函数将Picture1中的小块随机地拷贝到Picture2中的相同位置处。
你不能简单地产生一个随机数,然后将这个随机数的值所对应的那一小块图片拷到Picture2中。因为随机数是随机的,所以有可能某些数重复出现,而某些数很久甚至始终未出现。这就造成Picture2中有些块被重复拷贝,而有些块始终未出现。另外,在随机拷贝的后阶段,随机数与以前重复的概率越来越大,这就造成新块出现的时间越来越慢,达不到理想的马赛克效果。
解决的办法是先产生一个随机系列。用一维数组 B(n)记录n个随机值,每一个随机值都在n以内,且各不相同。然后按顺序将B(n)中的随机值读出,并根据这个随机值拷贝对应的图片块。这样,新块出现的速度才能做到均匀,而且保证每个图片块都能出现,从而达到非常完美的马赛克效果。
以上程序在WIN95,VB4中运行通过,在VB3,VB5,VB6中梢加修改,也可以运行通过。图片出现的效果还有很多,限于篇幅所限,就不在这里叙述了。只要你灵活地应用以上方法,一定还能产生更多更美的图片出现效果。这些风格各异的图片出现效果必定会为您的Visual Basic程序增添美丽的情调,使您的程序更富魅力、更具专业。保留:: http://www.qqread.com/vb/n882254100.html进入讨论组讨论。
马赛克效果在很多软件中都有应用,其原理是将Picture1从形式上划分为很多小块,如图所示,一共有n块。然后利用BitBlt函数将Picture1中的小块随机地拷贝到Picture2中的相同位置处。
你不能简单地产生一个随机数,然后将这个随机数的值所对应的那一小块图片拷到Picture2中。因为随机数是随机的,所以有可能某些数重复出现,而某些数很久甚至始终未出现。这就造成Picture2中有些块被重复拷贝,而有些块始终未出现。另外,在随机拷贝的后阶段,随机数与以前重复的概率越来越大,这就造成新块出现的时间越来越慢,达不到理想的马赛克效果。
解决的办法是先产生一个随机系列。用一维数组 B(n)记录n个随机值,每一个随机值都在n以内,且各不相同。然后按顺序将B(n)中的随机值读出,并根据这个随机值拷贝对应的图片块。这样,新块出现的速度才能做到均匀,而且保证每个图片块都能出现,从而达到非常完美的马赛克效果。
| Dim A(0 To 1000) As Integer Dim B(0 To 400) As Integer Dim S1, S2 As Integer Picture2.Cls 注释:产生随机数组 For I = 0 To 1000 A(I) = 0 Next For I = 0 To 400 Loop1: k = Int(Rnd() * 1000) + 1 If Not (A(k) = 0) Then GoTo Loop1 A(k) = I Next For I = 0 To 1000 If Not (A(I) = 0) Then B(V1) = A(I) V1 = V1 + 1 End If Next ‘根据随机数组的值,拷贝小图片 S1 = Picture1.Width / 20 S2 = Picture1.Height / 20 For I = 0 To 400 k2 = B(I) Mod 20 k1 = ((Int(B(I)) - k2) / 20) * S2 k2 = k2 * S1 r% = BitBlt(Picture2.hDC, k2, k1, S1 + 2, S2 + 2, Picture1.hDC, k2, k1, &HCC0020) For j = 1 To 5000 注释:wait Next Next |
以上程序在WIN95,VB4中运行通过,在VB3,VB5,VB6中梢加修改,也可以运行通过。图片出现的效果还有很多,限于篇幅所限,就不在这里叙述了。只要你灵活地应用以上方法,一定还能产生更多更美的图片出现效果。这些风格各异的图片出现效果必定会为您的Visual Basic程序增添美丽的情调,使您的程序更富魅力、更具专业。保留:: http://www.qqread.com/vb/n882254100.html进入讨论组讨论。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询



