频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源:yesky 作者: 出处:巧巧读书 2007-12-14 进入讨论组
上一页 1 2 3 4 5 6 7 
六、马赛克效果

  马赛克效果在很多软件中都有应用,其原理是将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进入讨论组讨论。
上一页 1 2 3 4 5 6 7 
收藏此文】【 】【打印】【关闭
较早的文章:感悟VB细水长流话API(四-2)

较新的文章:通讯录用VB做
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章