《VB编程实现图像的漂亮效果.docx》由会员分享,可在线阅读,更多相关《VB编程实现图像的漂亮效果.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VB编程实现图像的漂亮效果参数表-Angle 光照倾角,取值0到90之间,以角度为单位WidthOfArea 光照区宽度,取值大于1的整数,以像素为单位Speed 光照区运动速度,取值大于1的整数EnhanceRatio 光照强度参数,取值大于1的整数-好,原理就这么多,现在我们开始动手实现吧!打开VB6.0,选择新建标准EXE工程,在主窗口form1中绘制下表中所列控件并设置窗体和各控件的属性。控件 属性 设置Form1 Name Form1ScaleMode 3-pixelPictureBox Name PicDestScaleMode 3-pixelPicture 背景图PictureB
2、ox Name PicSourceScaleMode 3-pixelPicture 主体图Label Name LblACaption 角度Textbox Name TxtAText 30Label Name LblWCaption 宽度Textbox Name TxtWText 15Label Name LblECaption 强度Textbox Name TxtEText 15Label Name LblSCaption 速度Textbox Name TxtSText 1CommandButton Name Cmd1Caption 开始特效生成最后的窗体。在form1的代码编辑窗口中添加如
3、下代码:以下是引用片段:OptionExplicitConstpi=3.1415926api函数声明-PrivateDeclareSubCopyMemoryLibkernel32AliasRtlMoveMemory_(DestinationAsAny,SourceAsAny,ByValLengthAsLong)拷贝内存PrivateDeclareFunctionGetPixelLibgdi32(ByValhdcAsLong,_ByValXAsLong,ByValYAsLong)AsLong取像素值PrivateDeclareFunctionSetPixelLibgdi32(ByValhdcAs
4、Long,_ByValXAsLong,ByValYAsLong,ByValcrColorAsLong)AsLong设置像素值PrivateSubcmd1_Click()cmd1.Enabled=FalseMakeSparktxtA,txtW,txtS,0,txtE,65,10cmd1.Enabled=TrueEndSubPrivateSubMakeSpark(AngleAsLong,WidthOfAreaAsLong,_SpeedAsLong,MaskColorAsLong,_EnhanceRatioAsSingle,OffsetXAsLong,OffsetYAsLong)熠熠生辉效果参数表-
5、Angle光照倾角WidthOfArea光照区宽度Speed光照区运动速度MaskColor主体图的屏蔽色EnhanceRatio光照强度参数OffsetX主体图叠加到目标图时的X偏移OffsetY主体图叠加到目标图时的Y偏移Dimi&,X&,Y&,L&,Color&,EnhanceValue&DimRAsByte,GAsByte,BAsByteWithpicSourceFori=0To.Width+.Height*Tan(Angle*pi/180)+WidthOfArea_StepSpeed扫描主体图ForX=0To.Width-1ForY=0To.Height-1Color=GetPixe
6、l(.hdc,X,Y)遍历主体图的像素IfColor=MaskColorThenskip跳过ElseL=Abs(X-(i-Y*Tan(Angle*pi/180)计算当前像素于扫描线的X方向距离IfL255,255,R+EnhanceValue)G=IIf(G+EnhanceValue255,255,G+EnhanceValue)B=IIf(B+EnhanceValue255,255,B+EnhanceValue)Color=RGB(R,G,B)算出加强亮度后的颜色值EndIfSetPixelpicDest.hdc,X+OffsetX,Y+OffsetY,Color拷贝像素到目标图EndIfNe
7、xtYNextXpicDest.Refresh一帧已处理完,显示DoEventsNextiEndWithEndSubPrivateFunctionExtractR(ColAsLong)AsByte提取一个颜色值的红色分量值,红色分量位于这个颜色值的最低字节DimtmpAsByteCopyMemorytmp,ByValVarPtr(Col),1ExtractR=tmpEndFunctionPrivateFunctionExtractG(ColAsLong)AsByte提取一个颜色值的绿色分量值,绿色分量的位置比红色分量高一字节DimtmpAsByteCopyMemorytmp,ByValVarPtr(Col)+1,1ExtractG=tmpEndFunctionPrivateFunctionExtractB(ColAsLong)AsByte提取一个颜色值的蓝色分量值,蓝色分量的位置比绿色分量高一字节DimtmpAsByteCopyMemorytmp,ByValVarPtr(Col)+2,1ExtractB=tmpEndFunction本程序在Win2000+VB6.0下调试通过。青岛男科医院|