大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> API实现完美的图片出现效果

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

时间: 2021-07-31 作者:daque

作家:罗玉强 在用visual basic编制程序的功夫,常常要挪用图片,即使图片展示的功夫是以百般完备的功效展示的,(如马赛克功效,吊窗功效等)则你的步调就会显得越发精巧,你的步调就会越发专科化。正文报告了visual basic中怎样挪用api因变量,以及用api因变量中的bitblt因变量实行百般完备的图片展示功效的进程。 §1 普遍的图片展示功效   普遍情景下,要使visual basic中的图片展示,比方,要表露picture第11中学的图片,只需一句代码: picture1.visible=true   运用之上本领时,图片是遽然展示的。也不妨编搀杂一点的代码,使图片从左到右、从上到下或从中央向边际夸大。比方,使picture第11中学的图片从左到右展示,其代码为: picture1.width = 0 picture1.visible = true for i = 0 to 5000 step 50 解释:5000代办图片的莫大 picture1.width = i next i 使picture第11中学的图片从上到下展示的代码为: picture1.height = 0 picture1.visible = true for i = 0 to 4000 step 40 解释:4000代办图片的宽窄 picture1.height = i next i 使picture第11中学的图片从中央向边际夸大的代码为: picture1.width = 0 picture1.height = 0 picture1.visible = true for i = 0 to 100 picture1.width = picture1.width + 50 picture1.height = picture1.height + 40 picture1.left = picture1.left - 100 picture1.top = picture1.top - 80 next i   固然,你不妨精巧地运用之上方法实行其余越发场面的图片展示功效。但是,同authorware等其余软硬件体例的步调比拟,你的图片展示功效仍旧会相形见绌,由于authorware编制程序时,不妨很简单地实行从上到下、从左到右、吊窗、开闸、关门等完备的图片展示功效,要在visual basic中做到那些功效并非易事。 但“天无绝人之路”,宏大的windows api因变量中的bitblt因变量将扶助您实行这一理想。 §2 bitblt因变量 一、 bitblt因变量的功效 bitblt api因变量的功效是将屏幕就任何一块正片到屏幕上其它任何一个场合。 二、 证明bitblt因变量 1. 运转visual basic4.0步调组中的api text viewer步调项。 2. 在api text viewer中,单击file菜单下的load text file...吩咐。 3. 在展示的select a text api file对话框中,采用win32api.txt文献。 4. 为了使此后正片windows api因变量更快,你不妨将win32api.txt文献变换变成一个数据库。如图,单击“是(y)”。 5. 在api type下拉框中采用declare。 6. 在available items中采用bitblt,如图,单击add按纽,所以bitblt便出此刻selected items框中,单击copy按纽。bitblt因变量变正片到剪贴板上。 7. 封闭api text viewer,翻开visual basic步调,运用insert菜单下的module吩咐兴建一个module1,运用edit菜单下的paste吩咐,将剪贴板上的bitblt因变量正片到module第11中学。如许,在您的步调中,就不妨运用bitblt因变量了。 三、bitblt因变量中各参数简介 declare function bitblt lib "gdi32" (byval hdestdc as long, byval x as long, byval y as long, byval nwidth as long, byval nheight as long, byval hsrcdc as long, byval xsrc as long, byval ysrc as long, byval dwrop as long) as long   之上是bitblt因变量的证明方法,个中,各参数设置如次: 参数 刻画 hdestdc 接受位图的摆设刻画表 x 目的矩形左上角的论理x坐标 y 目的矩形左上角的论理y坐标 nwidth 目的矩形的宽窄 nheight 目的矩形的莫大 hsrcdc 源摆设刻画表 xsrc 源位图左上角的论理x坐标 ysrc 源位图左上角的论理y坐标 dwrop 正片形式 dwrop的百般大概值为: &hcc0020 dest=source &hee0086 dest=source or dest &h8800c6 dest=source and dest &h660046 dest=source xor dest &h440328 dest=source and (not dest) &h330008 dest=not source &h1100a6 dest=(not source)and(not dest) &hc000ca dest=source and pattern &hbb0226 dest=(not source) or dest &hf00021 dest=pattern &hfb0a09 dest=dpsnoo &h5a0049 dest=pattern xor dest &h550009 dest=not dest &h42& dest=black &hff0062 dest=white 在本步调中运用的bitblt因变量均设置dwrop=hcc0020,即使你设置dwrop为其余值,会收到其余异想不到的功效。 §3 用bitblt因变量实行形形色色的图片展示功效 实行髦滞计鱿中Ч幕驹硎牵荷柚昧礁鐾计騊icture1和picture2,在picture1中服入要表露的图片,(不妨在窗体安排时就装好,也不妨在步调运转进程中服入。)将picture第11中学的图片以百般本领正片到picture第22中学,进而实行形形色色的图片展示功效。 先在picture1中服入待表露的图片,并树立picture1的属性为autoredraw=true,visible=false, 树立picture2的属性为autoredraw=false,visible=true,树立form的属性为scalemode=3。 一、从上到下功效 将picture1从情势上分为很多小块   如图所示,要将picture第11中学的图片正片到picture第22中学,开始将picture1从情势上分别为很多小块a1、a2、a3、…,每块宽窄为。   而后运用bitblt因变量先将picture第11中学的a1块正片到picture第22中学的沟通场所,等候短促,再正片a2块、a3块、…直到。即使将博得充满小,则人眼看到 picture第22中学的图片即是以从上到下的功效展示的。其步调如次: 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因变量先将picture第11中学的a0块正片到picture第22中学的沟通场所,等候短促,再正片a1块、a2块、…直到。即使将博得充满小,则人眼看到 picture第22中学的图片即是以开闸的功效展示的。其步调如次: 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 按照同样的本领不妨创造“左右开闸”、“安排关门”、“左右关门”、“从中央向边际夸大”、“从边际向中央减少”等功效。 三、吊窗功效 分红几个大块,每个大块分红很多个小块 如图所示,要将picture第11中学的图片正片到picture第22中学,开始将picture1从情势上分别为很多宽窄为的大块,而后再将每一块进一步分别为宽窄为的几何小块。 而后运用bitblt因变量先将picture第11中学的a1块正片到picture第22中学的沟通场所,再正片b1块、c1块、…5却蹋倏奖碼2块、b2块、c2块、…。即使将博得充满小,则人眼看到 picture第22中学的图片即是以吊窗的功效展示的。其步调如次: 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 按照同样的原因,不妨创造左右吊窗功效。 四、逐段翻开功效 分红几个大块,每个大块分红很多个小块 如图所示,要将picture第11中学的图片正片到picture第22中学,开始将picture1从情势上分别为很多宽窄为的大块,而后再将每一块进一步分别为宽窄为的几何小块。 而后运用bitblt因变量先将picture第11中学的a0块正片到picture第22中学的沟通场所,再正片a1块、a2块、…。等候短促,再正片b0块、b1块、b2块、…。即使将博得充满小,则人眼看到 picture第22中学的图片即是以逐段翻开的功效展示的。其步调如次: 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块在picture第22中学的场所 a1块在picture第22中学的场所进步了 逐段加入功效的创造要烦恼少许,要将picture第11中学的图片正片到picture第22中学,开始将picture1从情势上分别为很多宽窄为的大块a1、a2、a3、…。 运用bitblt因变量先将picture第11中学的a1块正片到picture第22中学的最右边,如图(2),等候短促,将picture第22中学的图片废除掉,而后将picture第11中学的a1块正片到picture第22中学的隔绝最右边处。如图(3),a1块好象向左进步了,如许下来,就不妨实行a1块从左加入,运用同样的方法使a2块、a3块、…顺序渐渐加入。如许,人眼看到 picture第22中学的图片即是以逐段加入的功效展示的。其步调如次: 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因变量将picture第11中学的小块随机地正片到picture第22中学的沟通场所处。   你不许大略地爆发一个随机数,而后将这个随机数的值所对应的那第一小学块图片拷到picture第22中学。由于随机数是随机的,以是有大概某些数反复展示,而某些数很久以至一直未展示。这就形成picture第22中学有些块被反复正片,而有些块一直未展示。其余,在随机正片的后阶段,随机数与往日反复的几率越来越大,这就形成新块展示的功夫越来越慢,达不到理念的马赛克功效。   处置的方法是先爆发一个随机系列。用一维数组 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步调填补时髦的色彩,使您的步调更富魅力、更具专科。 

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.