VB中实现图像特技(2)

2016-02-19 16:33 1 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享VB中实现图像特技(2)的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

->设置各控件的属性如下:
  Form1:AutoRedraw:True
  ScaleMode:3
  Picture1:AutoRedraw:True
  ScaleMode:3
  Visible:False
  2代码编写
  Modull.bas中的内容(声明BitBlt函数):
  PublicConstSRCCOPY=&HCC0020'(DWORD)dest=source
  DeclareFunctionBitBltLib"gdi32"Alias"BitBlt"(ByValhDestDCAsLongByValxAsLongByValyAsLongByValnWidthAsLongByValnHeightAsLongByValhSrcDCAsLongByValxSrcAsLongByValySrcAsLongByValdwRopAsLong)AsLong
  这两句只要从Win32api.txt文件中粘贴即可。
  Form1中的代码:
  在Declare中定义全局变量:
  Constbmpfilemax=5&总共5个bmp文件
  Dimbmpfile(bmpfilemax)AsString&bmp文件的文件名数组
  Dimdrawbmpmode(bmpfilemax)AsInteger&各画显示时的切换方式
  Dimbmpnum,movestep,xmax,ymaxAsInteger
  DimkxyAsSingle&x,y二个方向的比例
  程序运行时先作初始化工作:
  PrivateSubForm-Load()
  bmpnum=0&当前文件号=0,第一个文件
  bmpfile(0)=App.Path ''mp1.bmp''bmpfile(1)=App.Path ''mp2.bmp''
  bmpfile(2)=App.Path ''mp3.bmp''
  bmpfile(3)=App.Path ''mp4.bmp''
  bmpfile(4)=App.Path ''mp5.bmp''
  drawbmpmode(0)=1
  drawbmpmode(1)=5
  drawbmpmode(2)=3
  drawbmpmode(3)=4
  drawbmpmode(4)=2
  movestep=0&步进参数
  xmax=Form.ScaleWidth/2
  ymax=Form.ScaleHeight/2
  kxy=ymax/xmax
  Picture1.Picture=LoadPicture(bmpfile(bmpnum))
  Timer1.Interval=30&定时器起动
  EndSub
  响应鼠标:
  
  PrivateSubForm-Click()
  End&当有击鼠标动作时程序结束
  EndSub
  
  切换演示工作主要在定时器中完成:
  PrivateSubTimer1-Timer()
  hDestDC=Form1.HDC&目标DC
  hSrcDC=Picture1.hDC&源DC,画是从不可见的Picture1中拷贝到窗体
  drawflag=drawbmpmode(bmpnum)&当前画出现的方式
  SelectCasedrawflag
  Case1&从中间逐步放大
  endmax=xmax&用于结束判断
  X1=xmax-movestep
  w=movestep*2
  Y1=Cint(ymax-movestep*kxy)
  h=Cint(2*movestep*kxy)
  i=BitBlt(hDestDC,X1,Y1,w,h,hSrcDC,X1,Y1,SRCCOPY)
  Case2&从左到右
  endmax=xmax
  w=movestep*2
  h=Form1.ScaleHeight
  i=BitBlt(hDestDC,0,0,w,h,hSrcDC,X1,Y1,SRCCOPY)
  
  Case3'左右向中间
  endmax=xmax
  w=movestep
  h=Form1.ScaleHeight
  i=BitBlt(hDestDC,0,0,w,h,hSrcDC,0,0,SRCCOPY)&左面部分
  X1=Form1.ScaleWidth-movestep
  i=BitBlt(hDestDC,X1,0,w,h,hSrcDC,X1,0,SRCCOPY)&左面部分
  Case4'栅条状
  endmax=CInt(2*xmax/10)&共分阶10条
  tempi=CInt(2*xmax/10)
  w=movestep
  h=Form1.ScaleHeight
  Forij=0To9
  i=BitBlt(hDestDC,tempi*ij,0,w,h,hSrcDC,tempi*ij,0,SRCCOPY)
  Nextij
  Case5'棱形状
  endmax=CInt(2*xmax/10)
  tempi=CInt(2*xmax/10)
  w=movestep
  Forih=0Tow-1
  Forik=0To9
  Forij=0To9
  l=tempi*ik tempi/2
  t=tempi*ij tempi/2
  i=BitBlt(hDestDC,1-(w-ih),t-ih,(w-ih)*2,1,hSrcDC,1-(w-ih),t-ih,SRCCOPY)
  i=BitBlt(hDestDC,1-(w-ih),t ih,(w-ih)*2,1,hSrcDC,1-(w-ih),t ih,SRCCOPY)
  Nextij
  Nextik
  Nextih
  EndSelect
  
  Form1.Refresh
  
  movestep=movestep 2&步进增加
  IfmovestependmaxThen&若步进够大,画面都已显示,本张画结束切换
  bmpnum=bmpnum 1&进到下一张画
  Ifbmpnum=bmpfilemaxThen&若5张画已显示完则再从第一张开始
  bmpnum=0
  EndIf
  movestep=0
  Picture1.Picture=LoadPicture(bmpfile(bmpnum))
  EndIf
  EndSub->->

来源:https://www.tulaoshi.com/n/20160219/1612395.html

延伸阅读
一、API函数的声明、自定义数据类型及常量的定义 ----注意:API函数的声明应在应用程序的代码模块中进行,且一条声明必须放在一行中'API函数的声明 PublicDeclareFunctionFindFirstFileLib "kernel32"Alias"FindFirstFileA" (ByVallpFileNameAsString, lpFindFileDataAsWIN32_FIND_DATA)AsLong PublicDeclareFuncti...
----在VISUALBASIC中没有什么命令或函数能够实现将一个位图旋转一个角度后显示出来,但我们可以用画点的方式,将一个图画盒中的位图中的像素点旋转一个角度后画入另一个图画盒中,当源图画盒中的像素都被画到目标图画盒中时,也就完成了位图的旋转。 ----这里主要用到了VISUALBASIC中的两个方法:POINT方法和PSET方法。POINT方法的作用...
Windows3.x、Windows95和Widnows98中,拖放是最常用的操作,VB5.0在程序设计中能非常容易地实现这一操作。 与拖放有关的属性 1、DragMode属性 该属性用来设置自动或手动拖放模式,缺省值为0(手动方式)。为了让控件自动执行拖放操作,必须把它的属性设为1,该属性即可以在属性窗口中设置,也可以在程序中设置,如:Picture1.DragMo...
一般进入系统都要登录(如进入Windows NT),进行身份检验,以保证软件的合法使用和维护,便于明确责任。我们自己开发的系统也必须保证系统使用者是合法用户,登录时要进行身份验证。 ---- 系统登录时一般有三次机会,超过则视为非法用户,不让使用系统。本程序是用VB5.0实现的,后台数据库是Access 97。 其主要源程序代码如下:Priva...
VB作为一种面向对象的Windows应用程序的开发软件,以其功能强大和简单易用的编程手段受到广大编程人员的喜爱。VB中提供了许多用于Windows程序设计的控件和大量的函数,本文就将告诉您怎样利用VB中的函数来实现邮件传输的功能。 首先我们在服务器上按照不同的帐号建立了不同的工作目录,采用NFS协议将多台PC终端连接到服务器。这样,邮件发送...

经验教程

20

收藏

93
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部