一道炫目的闪光在图像上从左至右徐徐掠过,相信如果把这样的特效应用到程序的界面上一定能为你的程序增色不少。这样的特效到底是怎样实现的呢?让我们一起来分析一下,这是本特效在某一瞬间的截图,可以看出沿着一条倾斜的扫描线,它周围的象素都按照近强远弱(距扫描线)的规律增强亮度(当然,扫描线并不显示出来,它只是一个抽象的概念,以方便我们的编程工作)。当扫描线从图像最左端平滑地移动到图像最右端的时候,由于视觉暂留作用,看起来就会有熠熠生辉的效果。那么怎样加强像素的亮度呢?可不能直接增大像素的颜色值,因为像素的颜色值是一个长整形数值,使用4个字节表示,最高位的字节的值为0,其它3个字节依次是B、G、R值,所以要加强像素的亮度,就要分别增加B、G、R值的大小。由于这是个动态特效,静态图片很难表达清楚,读者可先运行一下代码以帮助理解。
为了使本特效更灵活、更实用,笔者定义了几个参数,可以通过参数对特效做调整以达到满意的效果。
参数表-----------------------------------------------------
Angle 光照倾角,取值0到90之间,以角度为单位
WidthOfArea 光照区宽度,取值大于1的整数,以像素为单位
Speed 光照区运动速度,取值大于1的整数
EnhanceRatio 光照强度参数,取值大于1的整数
-----------------------------------------------------
|
控件 |
属性 |
设置 |
|
Form1 |
Name |
Form1 |
|
ScaleMode |
3-pixel | |
|
PictureBox |
Name |
PicDest |
|
ScaleMode |
3-pixel | |
|
Picture |
背景图 | |
|
PictureBox |
Name |
PicSource |
|
ScaleMode |
3-pixel | |
|
Picture |
主体图 | |
|
Label |
Name |
LblA |
|
Caption |
角度 | |
|
Textbox |
Name |
TxtA |
|
Text |
30 | |
|
Label |
Name |
LblW |
|
Caption |
宽度 | |
|
Textbox |
Name |
TxtW |
|
Text |
15 | |
|
Label |
Name |
LblE |
|
Caption |
强度 | |
|
Textbox |
Name |
TxtE |
|
Text |
15 | |
|
Label |
Name |
LblS |
|
Caption |
速度 | |
|
Textbox |
Name |
TxtS |
|
Text |
1 | |
|
CommandButton |
Name |
Cmd1 |
|
Caption |
开始特效 |
生成最后的窗体。