您的位置: 旅游网 > 明星

VB编程实现图像的漂亮效果

发布时间:2019-10-17 02:18:54

本文讲解了如何通过VB编程实现图像的漂亮效果。  参数表-----------------------------------------------------

Angle 光照倾角,取值0到90之间,以角度为单位

WidthOfArea 光照区宽度,取值大于1的整数,以像素为单位

Speed 光照区运动速度,取值大于1的整数

EnhanceRatio 光照强度参数,取值大于1的整数

-----------------------------------------------------

好,原理就这么多,现在我们开始动手实现吧!打开VB6.0,选择新建标准EXE工程,在主窗口form1中绘制下表中所列控件并设置窗体和各控件的属性。

控件 属性 设置

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 开始特效

生成最后的窗体。

在form1的代码编辑窗口中添加如下代码:

以下是引用片段:

OptionExplicit

Constpi=3.1415926

’api函数声明------------------------------------------------------------

PrivateDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"_

(DestinationAsAny,SourceAsAny,ByValLengthAsLong)’拷贝内存

PrivateDeclareFunctionGetPixelLib"gdi32"(ByValhdcAsLong,_

ByValXAsLong,ByValYAsLong)AsLong’取像素值

PrivateDeclareFunctionSetPixelLib"gdi32"(ByValhdcAsLong,_

ByValXAsLong,ByValYAsLong,ByValcrColorAsLong)AsLong’设置像素值

PrivateSubcmd1_Click()

cmd1.Enabled=False

MakeSparktxtA,txtW,txtS,0,txtE,65,10

cmd1.Enabled=True

EndSub

PrivateSubMakeSpark(AngleAsLong,WidthOfAreaAsLong,_

SpeedAsLong,MaskColorAsLong,_

EnhanceRatioAsSingle,OffsetXAsLong,OffsetYAsLong)

’熠熠生辉效果

’参数表-----------------------------------------------------

’Angle光照倾角

’WidthOfArea光照区宽度

’Speed光照区运动速度

’MaskColor主体图的屏蔽色

’EnhanceRatio光照强度参数

’OffsetX主体图叠加到目标图时的X偏移

’OffsetY主体图叠加到目标图时的Y偏移

Dimi&,X&,Y&,L&,Color&,EnhanceValue&

DimRAsByte,GAsByte,BAsByte

WithpicSource

Fori=0To.Width+.Height*Tan(Angle*pi/180)+WidthOfArea_

StepSpeed

’扫描主体图

ForX=0To.Width-1

ForY=0To.Height-1

Color=GetPixel(.hdc,X,Y)

’遍历主体图的像素

IfColor=MaskColorThen

’skip跳过

Else

L=Abs(X-(i-Y*Tan(Angle*pi/180)))

’计算当前像素于扫描线的X方向距离

IfL<=WidthOfAreaThen’如果当前像素在光照范围内

R=ExtractR(Color)’取R,G,B值

G=ExtractG(Color)

B=ExtractB(Color)

EnhanceValue=EnhanceRatio*(WidthOfArea-L)

’算出要增强的亮度值

’加强亮度,但不能超过最大值255

R=IIf(R+EnhanceValue>255,255,R+EnhanceValue)

G=IIf(G+EnhanceValue>255,255,G+EnhanceValue)

B=IIf(B+EnhanceValue>255,255,B+EnhanceValue)

Color=RGB(R,G,B)’算出加强亮度后的颜色值

EndIf

SetPixelpicDest.hdc,X+OffsetX,Y+OffsetY,Color

’拷贝像素到目标图

EndIf

NextY

NextX

picDest.Refresh’一帧已处理完,显示

DoEvents

Nexti

EndWith

EndSub

PrivateFunctionExtractR(ColAsLong)AsByte

’提取一个颜色值的红色分量值,红色分量位于这个颜色值的最低字节

DimtmpAsByte

CopyMemorytmp,ByValVarPtr(Col),1

ExtractR=tmp

EndFunction

PrivateFunctionExtractG(ColAsLong)AsByte

’提取一个颜色值的绿色分量值,绿色分量的位置比红色分量高一字节

DimtmpAsByte

CopyMemorytmp,ByValVarPtr(Col)+1,1

ExtractG=tmp

EndFunction

PrivateFunctionExtractB(ColAsLong)AsByte

’提取一个颜色值的蓝色分量值,蓝色分量的位置比绿色分量高一字节

DimtmpAsByte

CopyMemorytmp,ByValVarPtr(Col)+2,1

ExtractB=tmp

EndFunction

本程序在Win2000+VB6.0下调试通过。

查看本文来源

海南治疗男科医院
吐鲁番治疗宫颈炎费用
邢台治疗牛皮癣费用
日照治疗癫痫病医院哪家好
巴中治疗子宫内膜炎费用
猜你会喜欢的
猜你会喜欢的