王朝网络
分享
 
 
 

用VB实现特殊图形效果

王朝厨房·作者佚名  2007-01-04
宽屏版  字体: |||超大  

引言

在PowerPoint这样的软件中,各种各样的图形特效层出不穷,如百叶窗式、飞入式、关门式、棋盘式等等,在VB中也是可以实现这样的效果的,而且十分简单,其方法是调用Windows的API函数BitBlt。

BitBlt函数简介

BitBlt函数在API函数群中是个很重要的角色,尤其在图像处理方面,更是不可或缺。其原意是“Bit Block Transfer”,用途是位图的复制。用Bitblt函数显示图形特效,其原理十分简单,在窗体上绘制两个图片框,将图片存入一个图片框,同时令另一个为空,然后调用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

各参数含义如下:

参数 含义

hDestDC 目标设备环境的handle(hDC)

X,Y 欲复制图形放置在目标设备

环境的位置(左上角坐标)

nWidth 欲复制图形的宽度

nHeight 欲复制图形的高度

hSrcDc 源设备环境的hDC

xSrc,ySrc 从源图形的(xSrc,ySrc)坐

标处开始复制

dwRop 图形从源设备环境复制到目标

设备环境时所做的逻辑运算。

总共有15种运算码,通常使用

SRCCOPY(&HCC0020),表

示直接复制。

实现完美的图片显示效果

新建一窗体Form1和一模块Module1,在窗体上添加两个图片框Picture1、Picture2和一个按钮Command1,Picture1中加载任一图片,Picture2为空,为按钮编程以达到点击按钮,此图片在Picture2中以下述任一效果出现。

1.左进入效果

其原理是将源图形的像素元素,一列一列地复制到目标区域,配合稍许的时间延迟及数据复制的方向,从屏幕上看好像图形从左边进入图片框中。改变delay()函数中的参数可改变程序运行时间。据此可制作“从下进入”、“从上进入”、“从右进入”等效果。

2.水平百叶窗效果

其原理是事先将图形分割成几部分,每一部分都单独传输给目标图像,传输的方式采用“值差”式,

即先传输第一部分第一块,第二部分第一块……再传输第一部分第二块,第二部分第二块……直到图形出来为止,从屏幕上看好像是门帘逐渐反转显示一样。据此可做出“垂直百叶窗”等效果。

3.负片效果

其原理是把图形逐点复制,只是把复制的方式改为“NOTSRCCOPY”,从屏幕上看好像是图片的负片一样。

4.拉伸效果

其原理是开始把图形的宽度方向压缩成很窄的矩形,高度方向与原图像保持一致,然后逐步放大以接近原图片的宽度,从屏幕上看好像把图片拉伸了一样。

以下是部分源程序清单:

Private Sub Command1_Click()

Const SRCCOPY = &HCC0020

Const NOTSRCCOPY = &H330008

Dim i, j, w, h As Integer

Dim dtime, effect, scanline As Integer

Dim source, dest

dtime = 20000

w = Picture1.ScaleWidth

h = Picture1.ScaleHeight

source = Picture1.hDC

dest = Picture2.hDC

effect = Int(5 * Rnd)

Picture2.Cls

Select Case effect

Case 0: ’从左进入效果

For i = 0 To w

call BitBlt(dest, 0, 0, i, h, source, 0, 0, srccopy)

delay dtime * 3

Next

Case 1: ’左上角飞入效果

For i = 0 To w

Call BitBlt(dest, 0, 0, i, h * (i / w), source, 0, 0, srccopy)

delay dtime * 3

Next

Case 2: ’水平百叶窗效果

scanline = 10

For i = 0 To (scanline - 1)

For j = i To w Step scanline

Call BitBlt(dest, j, 0, 1, h, source, j, 0, srccopy)

delay dtime * 2

Next

delay 10 * dtime

Next

Case 3: ’负片效果

Call BitBlt(dest, 0, 0, w, h, source, 0, 0, notsrccopy)

Case 4: ’拉伸效果

For i = 0 To 100

For j = w To 0 Step -1

Call BitBlt(dest, j * i / 100, 0, 1, h, source, j, 0, srccopy)

Next

Next

End Select

End Sub

Public Sub delay(dtime As Long)

Dim i As Long

For i = 0 To dtime

Next i

End Sub

图片出现的效果还有很多,由于篇幅所限,就不在这里叙述了。只要您灵活地应用以上方法,一定还能产生更多更美的图片效果。这些风格各异的图片效果必定会为您的VB程序增添美丽的情调,使您的程序更富魅力、更专业。

(以上程序在VB 6.0下调试通过)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有