第11章-多媒体程序设计-多媒体技术基础及应用-教学课件_第1页
第11章-多媒体程序设计-多媒体技术基础及应用-教学课件_第2页
第11章-多媒体程序设计-多媒体技术基础及应用-教学课件_第3页
第11章-多媒体程序设计-多媒体技术基础及应用-教学课件_第4页
第11章-多媒体程序设计-多媒体技术基础及应用-教学课件_第5页
已阅读5页,还剩271页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章多媒体程序设计

11.1多媒体程序设计概要11.2人机界面设计11.3图形、图像程序设计技术11.4数字音频软件开发技术第11章多媒体程序设计 11.1多媒体程序设计概要11.1多媒体程序设计概要 11.1.1VB编程的基本概念 1.三个重要概念 (1)窗口。窗口是一种有边界的矩形区域,例如,VB窗口、Word的文档窗口、对话框窗口等。 (2)事件。事件是通过鼠标、按键的操作、程序的控制或其他窗口所产生的操作或行为。 (3)消息。发生事件时就引发一条消息发送到操作系统。11.1多媒体程序设计概要 11.1.1VB编程的基 2.事件驱动模型 事件驱动模型具有非过程化的特点,在事件驱动模型中,程序代码不是按照预定的顺序执行,而是在响应不同的事件时执行不同的代码片段。 3.Windows的工作方式 Windows操作系统通过给每一个窗口提供一个惟一的标识符来管理所有窗口。操作系统连续地监视每一个窗口的活动或事件信号。当事件发生时,就引发一条消息,操作系统处理该消息并广播给其他窗口。最后,每一个窗口根据自身处理该条消息的指令而采取适当的操作。 2.事件驱动模型 11.1.2VB中的对象 对象是代码和数据的组合,可以作为一个单位来处理。对象简单地说就是我们经常看到的各种窗口、按钮、文本框等。对象可以是应用程序的一部分,比如可以是控件或窗体。整个应用程序也是一个对象。具体地说,在VB中对象可分为全局对象和程序界面对象。 1.全局对象 所谓全局对象,是指应用程序在程序的任何层次都可以访问的对象,共有以下几种: (1)APP:设计的应用程序,它的属性决定应用程序的标题、路径、可执行文件名以及帮助文件名等。

11.1.2VB中的对象 (2)Clipboard:它就是Windows中的剪贴板,在VB应用程序中可用关键字Clipboard来访问它,从而操作其上的数据或图形,即将数据送到剪贴板上或从剪贴板上取回数据。 (3)Screen:计算机屏幕,也是应用程序窗口的“容器”,通过它可以设置应用程序的窗口在屏幕上的位置以及鼠标指针的形状。 (4)Debug:调试窗口,当应用程序在VB集成环境中运行时它才显示出来,用于调试程序。 (5)Printer:打印机,联机的打印机也是一个对象,应用程序可操作它在纸上输出结果。 (2)Clipboard:它就是Windows中的剪 2.程序界面对象 程序界面对象共有以下几种: (1)Form:窗体。VB工程中的每一个窗体都是独立的对象,类似控件对象,它们提供一些事件过程,可作为程序界面或对话框。绝大多数情况下,我们把窗体当作在其中能放置控件的框架,它是应用程序界面中的部件或对话框中的部件的“容器”。 (2)Control:控制部件(控件)。这是和用户交互的标准部件,命令按钮、文本框、列表框、滚动条、菜单等都属此类。除菜单控件外,所有控件都可用工具箱中的工具“画”出来。菜单控件是用菜单设计窗口作为工具设计出来的。界面设计就是在窗体上放置控件并指定其属性。

2.程序界面对象 (3)数据库访问对象:数据库是对象,并且还包含其他对象,如字段、索引等。VB的专业版可以操作数据库,数据访问对象是为访问数据库而设的。 11.1.3VB程序设计要素 通常,一个VB程序至少含有一个窗体,在这个窗体中可以包含一个或多个对象,并以控件的形式存在。控件不仅拥有属性,还拥有事件过程,它决定当控件有一个或几个操作行为激活时所发生的事情。

(3)数据库访问对象:数据库是对象,并且还包含其他对象 1.属性(Properties)的设置 属性是一个对象的性质,它决定对象的外观和一般行为。对象的属性中,有的属性在设计时可更改,可通过属性窗口加以设置;有的属性是系统赋予对象的,只能在运行时访问这种属性,但不可更改;有的属性仅在运行时才可访问和更改。后两种属性出现在属性窗口的列表中。 在程序中,访问对象的属性的格式如下: [对象名.]属性 其中,对象名和属性间用“.”连接,若省略对象名,则指当前具有焦点的对象。上述组合可看作是一个变量。即可对其赋值(除非只读属性),也可将其值赋予别的变量。 1.属性(Properties)的设置 2.事件(Event)的产生 事件就是系统可以感知的用户操作信息,可以看作是系统对对象的响应。事件通常触发VB程序中的一段代码。事件可分为鼠标事件、键盘事件和其他事件。每个对象都可引发事件,在VB中都已经准备好对应的事件过程,程序员只需编写响应事件的代码。 3.函数(Function)、过程(Procedure)和方法(Method)的作用 (1)函数。函数是包含操作数据的程序语句集。当我们需要完成某种任务时,就要调用过程;当我们需要返回值时,就调用函数。VB包括几十种函数,这些函数执行通用的操作,如修改字符串的前导空格或去掉其尾部空格或计算一个角度的正弦。 2.事件(Event)的产生 (2)过程。在VB中,每个对象可引发的事件过程的模板已经准备好,在设计时,双击控件,可打开与此控件有关的代码窗口,在过程下拉列表框中,列出了这个控件可能引发的事件对应的过程。选择某一过程可打开该过程的代码模板。另一种过程就是函数,和对象相联系的函数用于改变或设置对象的某种属性。例如,LoadPicture函数可设置窗体的Picture属性。 (3)方法。VB中的窗体和控件对象给我们提供了一种特殊的过程,它在程序控制下工作,可以看作是对象的动作。在面向对象程序设计中,这样的过程叫做方法。方法是一种特殊的过程,它和过程的差别是它从属于特定的对象,因此调用时必须指明对象。方法的调用语法为 (2)过程。在VB中,每个对象可引发的事件过程的模板已 [对象名.]方法[参数] 对象名和方法之间用“.”连接。若省略对象名,则对象指的是当前的活动对象。例如,调用Debug对象的Print方法,可用语句 Debug.Print 4.模块(Module)组织

VB应用程序的代码是以分层方式组织并存储在模块中的。典型的应用程序应包括若干模块:应用程序中每个窗体的窗体模块、共享代码的可选标准模块以及可选的类模块。每个模块包含若干含有代码的过程:Event事件过程、Sub子过程或Function函数以及Property属性过程。 [对象名.]方法[参数]

图11-1VB的常用控件和窗体(a)控件;(b)窗体

图11-1VB的常用控件和窗体(a)控件;(b)窗 对于每个标准模块、类模块和窗体模块都可包含声明及过程。 (1)声明:可以将常数、类型、变量和动态链接库(DLL)过程的声明放在窗体、类或标准模块的模块级。 (2)过程:可以是Sub、Function或Property过程。它包含可以作为单元来执行的代码片段。 11.1.4VB中的常用控件和窗体 VB的常用控件如图11-1(a)所示,其他要添加的控件可在菜单项“工程/部件”中选择添加。VB的常用窗体(Form)如图11-1(b)所示。 对于每个标准模块、类模块和窗体模块都可包含声明及过程。11.2人机界面设计 11.2.1多媒体图形用户界面的特点 图形用户界面(GraphicsUserInterface,GUI)专门用来代表以图形方式工作的窗口,如图标、菜单、按钮、滚动条、对话框等界面部件,也包括能够移动、定位、点取图形目标的定位设备的界面。 多媒体图形用户界面是在图形用户界面的基础上,再加上一些其他媒体(如多媒体音频、视频、动画等)的特性。11.2人机界面设计 11.2.1多媒体图形用户界面 多媒体图形用户界面的主要特点如下: (1)广泛使用窗口、图标、菜单、按钮、对话框等基本界面部件来表示应用目标,这些图形目标的表示都具有直观、形象、可视等特点。其中图标是表示把一个应用程序缩到最小时所代表的程序内部功能、动作的可视图形符号。 (2)可使用图形部件形象地表示感兴趣的目标,使系统完成的操作或命令能用逼真的模拟、比喻来表示,而且所有感兴趣的目标在GUI界面上被连续显示出来。 (3)有高度的交互性。每一输入动作都直接被系统解析,动作的结果可以是文字、声音、图像、视频或动画等多媒体表现形式,并可以立即反馈给用户。而对于其他交互方式,要等到全部输入完成后才能被系统解析,并产生系统响应。 多媒体图形用户界面的主要特点如下: (4)支持鼠标类定位设备完成光标的移动和目标的选取。因此,只要操纵鼠标器或按下按钮即可代替文本界面方式中的复杂语法和命令键入,在GUI方式下的识别和点取目标比命令方式下记住并键入命令要容易和快速得多。 (5)提供了快速的、增量式的可逆转的操作,并且所有操作过程效果都可观察到。 (6)以一致的方式完成对所有目标的显示和操纵。一致的显示和操纵方式减少了用户的记忆、学习负担和出错率,也有利于标准化的人机界面的构成。 (4)支持鼠标类定位设备完成光标的移动和目标的选取。因 (7)提供系统预验证功能,使得只有有效的交互才能发生效果。如果用户指向一个对象的动作对当前的任务是无意义的,则显示屏上就无反应。 (8)提供了对用户出错的保护机制和强有力的帮助机制。GUI界面使用比喻、模拟日常操作方式,因此易学易用,本身不易出错,并且一旦出错,结果可立即显示。而且用户操作是可恢复的,即具备UNDO功能。这些功能减少了用户对可能错误的担心,使用户能把精力集中在任务上。另外,强有力的帮助机制还可以帮助用户正确操纵和使用系统。 (7)提供系统预验证功能,使得只有有效的交互才能发生效 11.2.2利用VB开发图形用户界面 首先要了解界面设计的一般性原则,最为重要的有: (1)界面要具有一致性。一致性原则在界面设计中最容易被违反,同时也最容易修改和避免。例如,在菜单和联机帮助中必须使用相同的术语;对话框必须具有相同的风格。 (2)常用操作要有捷径。常用操作的使用频度大,应该减少操作序列的长度,使常用操作具有捷径,使界面在功能实现上简捷和高效。例如,为文件的常用操作(如打开、关闭、保存等)设置快捷键。 11.2.2利用VB开发图形用户界面 (3)提供简单的错误处理。系统要有错误处理的功能,在出错时,系统应能检测出错误,并且提供简单的容易理解的错误处理功能。 (4)提供信息反馈。对常用的操作和简单的操作可以不要反馈,但对不常用操作和至关重要的操作,系统应该提供信息的反馈。 (5)操作可逆。操作可逆对于不具备专门知识的操作人员相当有用。可逆的动作可以是单个操作,或者是一个相对独立的操作序列。 (6)设计良好的联机帮助。对大多数不熟练用户来说,联机帮助具有非常重要的作用。 (3)提供简单的错误处理。系统要有错误处理的功能,在出 11.2.3菜单设计的原则和编程技术 菜单设计有如下的一般性原则: (1)按照系统的功能来组织菜单,分配菜单界面的宽度和深度,使菜单层次结构和系统功能层次结构相一致; (2)选用广而浅的菜单树,一般菜单嵌套层次不宜超过四层,每级菜单项不宜超过7~9项; (3)根据菜单选项的含义进行分组,并且按一定的规则排序; (4)菜单项的安排应有利于提高菜单选取速度; (5)常用选项要设置快捷键。 11.2.3菜单设计的原则和编程技术 结合以上原则,VB菜单编程有以下6方面的技术和技巧。 1.菜单选项的分组 在VB中,菜单选项的分组是通过菜单栏分隔横线实现的。在菜单的一定位置增加一个Caption属性为“_”的菜单项,则菜单相应位置上就表现为一条横线。 2.常用选项快捷键的设置 打开菜单设计窗口(MenuDesignWindow),对应于每个菜单选项有相应的快捷键列表。但具有子菜单的菜单或者顶层菜单的快捷键要按Windows的界面设计原则设置,顶层菜单的快捷键形式是“Alt+字母键”。 结合以上原则,VB菜单编程有以下6方面的技术和技巧。 3.菜单选项的允许与禁止、可见与隐藏 菜单选项的允许与禁止是通过改变选项的Enabled属性实现的。 举例来说,假设菜单选项名为Mainmen,则禁止该选项可以用Mainmen.Enabled=False。 同样,隐藏一个选项可用Mainmen.Vsible=False来实现,恢复时用Mainmnue.Visible=True实现。

3.菜单选项的允许与禁止、可见与隐藏 4.弹出式菜单的实现(PopupMenuMethod) 弹出式菜单是在程序界面的一定区域内按鼠标键后出现的菜单,多用于实现系统的附加或增强功能。弹出式菜单的实现要用到下拉式菜单设计的技术和PopupMenu方法。具体做法是:在菜单设计框里设计好相应窗体的弹出式菜单(注意,要弹出的菜单必须至少有一个子菜单,因而这个菜单不能有快捷键,并且Checked属性必须是False),再把弹出式菜单的Visible属性改为False。 4.弹出式菜单的实现(PopupMenuMethod 在具有弹出式菜单的窗体的Form_Click中加入以下代码(假设弹出式菜单的Name属性是Mnuexample): SubForm_Click() PopupMenuMnuExample EndSub 如果要求只有按下鼠标左键或右键才能激活菜单,就必须在form_mousedown里加入以下代码: SubForm_MouseDown(ButtonAsInteger,shiftAsInteger,xAsSingle,yAsSingle)

在具有弹出式菜单的窗体的Form_Click中加入以下代IfButton=2ThenButton=2'表示鼠标右键 PopupMenuMenuExample EndIf PopupMenu的完整语法是 [form.]PopupMenuMenuName[flags[,x[,y]]] 改变flags的值可以控制弹出式菜单的表现形式。flags有两组值:一组值用来控制菜单的显示方式,包括PopupMenu_Leftalign、PopupMenu_CenterAlign和PopupMenu_RightAlign,分别表示以x为左边界、以x为中心和以x为右边界的显示方式,缺省为以x为左边界。IfButton=2ThenButton=2 一组值用来控制菜单项的选中方式,包括PopupMenu_LeftButton和PopupMenu_RightButton,分别表示左键选中和右键选中,两个值可同时使用,左键选中为缺省方式。flags的值由上面的两组值经过or运算得出。例如,要左对齐显示并且以左键选中为准,则应有。 flags=PopupMenu_LeftAlignorPopupMenu_LeftButton x和y用来定义菜单弹出的位置,缺省是鼠标点中的位置。 一组值用来控制菜单项的选中方式,包括PopupMenu_ 5.菜单项的其他属性 用Alt+字母键激活顶层菜单,或者在菜单激活后用字母键激活一个菜单项,必须使用&。&用在菜单项的标题属性(Caption)里。它的用法和作用与在用C语言编制Windows程序中的用法和作用相同。 如果希望顶层菜单之间的间隔大一些,或者某个顶层菜单出现在菜单条的最右端,就要用到标题属性是空格的菜单。如一个菜单的标题是由多个空格组成的,那么这个菜单在菜单条上就占用跟空格的个数相应的空间,并且它后面的菜单也顺序地后移。 5.菜单项的其他属性 6.位图菜单 在通常的程序中菜单总是以文本的方式存在,有时候显得单调乏味,如果能在菜单中加入位图图形,将会极大地增加用户的使用兴趣。下面介绍如何使用位图制作菜单选项。 位图菜单的创建,要用到Windows应用程序接口(API)函数,需要将这些函数的声明包含在应用程序的标准模块(Module1.Bas)中,具体的内容见下面的程序。 创建位图菜单的基本思想如下: (1)使用函数GetsubMenu来提取子菜单项的句柄,并通过使用函数CreateCompatibleDC来创建一个兼容的设备环境描述表。 6.位图菜单 (2)在一个循环过程中通过使用CreateCompatibleBitmap函数、SelectObject函数以及BitBlt函数来分别将针对各个菜单项所载入的位图选入到兼容设备环境中。载入位图的方法很多,在下面的程序中,我们在窗体上设置了4个图片框控件(PictureBox),使用它门载入4个预设的图标来作为菜单选项位图的源文件。当然也可以使用其他的方法,例如,在程序中使用LoadPicture函数来从磁盘装载位图。 (3)通过ModifyMenu函数绘制真正的位图菜单选项。 (4)使用Deletedc函数来释放设备环境,以便其他的程序可以使用这些设备。 (2)在一个循环过程中通过使用CreateCompat 工程文件的建立步骤如下: (1)在VisualBasic中建立一个新的工程,采用缺省的方法建立Form1。 (2)创建一个新的模块,采用缺省的方法建立Module1.Bas。 (3)在Form1上添加4个图片框控件(使用控件数组),将它们的Name属性设置为Picture1,将它们的Index属性依次设置为0、1、2、3,将它们的AutoRedrew属性、AutoreSize属性设置为Ture,将它们的Appearance属性、BorderStyle属性设置为0,Visble属性设置为False。 工程文件的建立步骤如下: (4)将Open.Bmp、About.Bmp、Help.Bmp、Quit.Bmp4个图标文件赋给上面的4个图片框控件的Picture属性。 (5)在Form1上添加一个菜单项,将其标题设置为“主菜单(&F)”,名称设置为Mnumain。在其下添加4个子菜单项,分别将这4个子菜单项的名称设置为“打开(&O)”。将“关于(&A)",“帮助(&H)”及“退出(&E)”的名称设置为“Mnumain_Select”,并将这4个子菜单项的索引相应设置为0、1、2、3。 (4)将Open.Bmp、About.Bmp、Help11.3图形、图像程序设计技术 11.3.1VB坐标系统及图形格式 1.坐标系统概述 在进行图形操作时,要使用绘图区或容器的坐标系统。如何用坐标系统定义窗体和控件在应用程序中的位置,是很重要的。 在VB中,坐标系统是一个二维网格,可定义屏幕上、窗体中或其他容器中的位置。使用窗体中的坐标(x,y),可定义网格上的位置。其中x值是沿x轴的位置,最左端的值是0;y值是沿y轴的位置,最上端的值是0。11.3图形、图像程序设计技术 11.3.1VB坐标 对于VB坐标系统,应注意以下几点: (1)当移动或调整控件的大小时,要使用控件容器的坐标系统。直接在窗体上绘制对象时,窗体就是容器;在框架或图片框里绘制控件时,框架或控件是容器。 (2)所有的图形和Print方法都要使用容器的坐标系统。 (3)一些用来调整窗体大小或移动窗体的语句,可设置窗体的位置和大小。

对于VB坐标系统,应注意以下几点: (4)当创建用来调整窗体大小或移动窗体的代码时,应先检查Screen对象的Height属性和Width属性,以确保窗体在屏幕上大小合适。 (5)屏幕的左上角总是(0,0)。任何容器的缺省坐标系统都是由容器的左上角(0,0)坐标开始的。 (6)沿坐标轴定义位置的测量单位,统称为刻度。在VB中,坐标系统的每个轴都有自己的刻度。坐标轴的方向、起点和坐标系统的刻度都是可以改变的。 (7)所有VB的移动、调整大小和图形绘制语句都根据缺省规定使用“缇”为单位。 (4)当创建用来调整窗体大小或移动窗体的代码时,应 2.VB的图形格式 VB可以支持的图形格式有位图(.bmp)、设备独立位图文件(.dib)、图标(.ico)文件、光标(.cur)文件、元(.wmf)文件、增强的元文件(.emf)、GIF(.gif)文件以及JPEG(.jpg)文件。 11.3.2PaintPicture方法和BitBltApi函数 PaintPicture的基本功能是传输图像块。它能快速地将两幅位图进行合并;能将位图的全部或某一部分快速剪切并粘贴到其他地方;能将位图自动延伸或压缩以适应新的环境;能在屏幕上不同位置之间、屏幕与内存之间传递位图;它采用32位三元光栅操作代码(Rasterop)在源位图、选定的刷子位图和目标位图之间进行颜色组合,生成目标位图中的最终颜色;它将13个常用的Rasterop操作以内部常量形式给出,不需任何声明。 2.VB的图形格式 1.PaintPicture方法 (1)作用:在Form,PictureBox或Printer上绘制图形文件的内容。 (2)语法:Object.PaintPicturePicture,x1,y1,Width1,Height1,x2,y2,Width2,Height2,Opcode (3)参数说明: ˙Object是可选的。一个对象表达式的值可以为窗体、PictureBox控件或Printer。如果省略Object,则为当前具有焦点的对象。 ˙Picture是必选的。要绘制到Object上的图形源、Form或PictureBox必须是Picture属性。 1.PaintPicture方法 ˙Width1是可选的(目标位图参数)。它用于指示Picture的目标宽度。 ˙Height1是可选的(目标位图参数)。它用于指示Picture的目标高度。 ˙x2,y2是可选的(源位图参数)。它用于指示Picture内剪贴区的坐标(x轴和y轴)。 ˙Width2是可选的(源位图参数)。它用于指示Picture内剪贴区的源宽度。 ˙Height2是可选的(源位图参数)。它用于指示Picture内剪贴区的源高度。

˙Width1是可选的(目标位图参数)。它用于指示Pic ˙Opcode是可选的。它是长型值或仅有位图使用的代码,表示源图与目标位图(或刷子位图)的组合关系,用来定义在将Picture绘制到Object上时对Picture执行的位操作。 2.BitBltApi函数 (1)作用:与PaintPictur方法相同。 (2)函数声明: DeclareFuntionBitBltLib"Gdi32"Alias"Bitblt(ByValhDestDCAsLong,ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLong ˙Opcode是可选的。它是长型值或仅有位图使用的 (3)参数说明: ˙hDestDC:目标设备环境。 ˙x:目标左上角坐标。 ˙y:目标顶端坐标。 ˙nWidth:目标宽。 ˙nHeight:目标高。 ˙hSrcDC:源设备环境。 ˙xSrc:源左上角坐标。 ˙ySrc:源顶端坐标。 ˙dwRop:位处理操作。 (3)参数说明: 注意:将一个.BMP加载入PictureBox控件和使用WindowsAPI函数BitBlt()添加图片之间有一点不同。当对一个图像使用BitBlt()时,PictureBox控件不能像使用LoadPicture方法那样去调整大小。 假设有四个图像文件(pic1.jpg~pic4.jpg),如图11-2所示,想让这四幅画自动地循环显示,每幅画以某种切换方式出现,单击“结束”按钮时退出。 注意:将一个.BMP加载入PictureBox控件和使用图11-2四幅画面切换的图像技巧图11-2四幅画面切换的图像技巧 设计步骤如下: 1)创建项目文件 加入一个新的模块文件Module1及一个新的窗体Form1。在Form1中加入一个图片框Picture1,一个命令按钮Command1,一个标签Label1和一个定时器控件Timer1。 2)各对象的属性如下: BeginVB.FormForm1 AutoRedraw =-1'True Caption ="四种图像特技演示" ClientHeight =1920 ClientLeft =6915 设计步骤如下:ClientTop =4620ClientWidth =3540LinkTopic ="Form1"ScaleHeight =128ScaleMode =3'PixelScaleWidth =236EndBeginVB.CommandCommand1Caption ="结束"Height =375ClientTop =4620Left =2280TabIndex =2Top =1440Width =1215EndBeginVB.TimerTimer1Left =0Top =0EndLeft =2280BeginVB.PictureboxPicturelAppearance =0'FlatAutoRedraw =-1'TrueBackColor =&H80000005&ForeColor =&H80000008&Height =1260Left =2280ScaleHeight =82ScaleMode =3'PixelBeginVB.PictureboxPicturelScaleWidth =82TabIndex =0Top =0Width =1260EndBeginVB.labelLabel1AutoSize =-1'TrueCaption ="请稍侯..."BeginPropertyFontScaleWidth =82Name ="宋体"Size =12Charset =134Weight =400Underline =0'FalseItalic =0'FalseStrikethrough =0'FalseEndPropertyName ="宋体"Height =240Left =0TabIndex =1Top =1440Width =1080End程序代码:Module1.bas中的内容(声明BitBlt函数):DeclareFunctionBitBltLib"gdi32"(ByValhDestDCAsLong,ByValxAsLong,ByvalyAsLong,ByValnWidthAsLong,ByValnHeightAslong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLongPublicConstSRCCOPY=&HCC0020Height =240 (2)Form1中的代码: '在"通用"段中定义全局变量 Constjpgfilemax=4'总共四个jpg文件 Dimjpgfile(jpgfilemax)AsString'jpg文件的文件名数组 Dimdrawjpgmode(jpgfilemax)AsInteger'各画显示时的切换方式 Dimjpgnum,movestep,xmax,ymax,ymaxAsInteger DimkxyAsSingle'x,y两个方向的比例,程序运行时先作初始化工作 PrivateSubCommand1_Click()'响应鼠标单击事件

PrivateSubForm_Load() (2)Form1中的代码:jpgnum=0'当前文件号为0,第一个文件jpgfile(0)=App.Path+"\Picl.jpg"'四幅图片保存在当前工程文件所在的目录下jpgfile(1)=App.Path+"\Pic2.jpg"jpgfile(2)=App.path+"\Pic3.jpg"jpgfile(3)=App.path+"\Pic4.jpg"drawjpgmode(0)=1drawjpgmode(1)=2drawjpgmode(2)=3jpgnum=0'当前文件号为0,第一个文件drawjpgmode(3)=4movestep=0'步进参数xmax=Form1.ScaleWidth/2ymax=Form1.ScaleHeight/2kxy=ymax/xmaxPicture1.Picture=LoadPicture(jpgfile(jpgnum))'装入图像Timer1.Interval=50'定时器启动EndSubdrawjpgmode(3)=4'切换画面工作在定时器中完成PrivateSubTimer1_Timer()hDestDC=Form1.hDC'目标DChSrcDC=Picture1.hDC'源DC,画是从不可见的Picture1中拷贝到窗体的drawflag=drawjpgmode(jpgnum)'当前画出现的方式SelectCasedrawflagCase1'从中间逐步放大Labell.Caption="从中间逐步放大"endmax=xmax'用于结束判断'切换画面工作在定时器中完成 x1=xmax-movestepw=movestep*2y1=CInt(ymax-movestep*kxy)h=Cint(2*movestep*kxy)i=BitBlt(hDestDC,x1,y1,w,h,hSrcDC,x1,y1,SrcCopy)Case2'从左到右Label1.Caption=“从左到右”endmax=xmaxw=movestep*2h=Form1.ScaleHeighti=BitBlt(hDextDC,0,0,w,h,hSrcDC,x1,y1,SrcCopy) x1=xmax-movestepCase3'左右向中间Label1.Caption="从右到左"endmax=xmaxw=movesteph=Form1.ScaleHeighti=BitBlt(hDestDC,0,0,w,h,hSrcDC,0,0,SrcCopy)'左面部分x1=Form1.ScaleWidth-movestepi=BitBlt(hDestDC,x1,0,(-1)*w,h,hSrcDC,x1,0,SrcCopy)'右面部分Case3'左右向中间Case4'栅条状Label1.Caption="栅条状"endmax=CInt(2*xmax/10)'共分为10条栅条tempi=CInt(2*xmax/10)w=movesteph=Form1.ScaleHeightForij=0To9i=BitBlt(hDestDC,tempi*ij,0,w,h,hSrcDC,tempi*ij,0,SrcCopy)NextijEndSelectCase4'栅条状Form1.Refreshmovestep=movestep+2'步进增加Ifmovestep>endmaxThen'若步进够大,画面都已显示,本张画结束切换jpgnum=jpgnum+1'进到下一张画Ifjpgnum>=jpgfilemaxThen'若5张画已显示完则再从第一张开始

Form1.Refreshjpgnum=0EndIfmovestep=0Picture1.Picture=LoadPicture(jpgfile(jpgnum))'装入图像EndIfEndSubjpgnum=0 11.3.3LoadPicture函数和SavePicture语句 1.LoadPicture函数 (1)作用:将图形载入到窗体的Picture属性、PictureBox控件或Image控件。 (2)语法:LoadPicture([Filename],[Size],[ColorDepth],[x,y]) (3)参数说明: ˙FileName是可选的。选中此参数后,字符串表达式指定一个文件名,可以包括文件夹和驱动器。如果未指定文件名,LoadPicture清除图像或PictureBox控件。 11.3.3LoadPicture函数和SavePic ˙Size可选变体。如果FileName是光标或图标文件,该参数用于指定想要的图像大小。 ˙ColorDepth可选变体。如果FileName是一个光标或图标文件,该参数用于指定想要的颜色深度,见表11-1。 ˙Size可选变体。如果FileName是光标或图标文表11.1指定颜色深度表11.1指定颜色深度 ˙x可选变体,如果使用y,则必须使用。只有当ColorDepth设为vbLPCustom时,才使用x和y值。 ˙y可选变体。使用同x 注:赋值不带参数的LoadPicture将清除窗体、图片框及图像控件中的图形。为了加载PictureBox控件和Image控件中显示的图形或加载作为窗体背景的图形,必须将LoadPicture的返回值赋给要显示该图片的对象的Picture属性。例如: SetPicture=LoadPicture("Party.Bmp") SetPicture1.Picture=LoadPicture("Party.Bmp") ˙x可选变体,如果使用y,则必须使用。只有当Colo 如果要将图标赋予窗体,则要把LoadPicture函数的返回值赋给Form1对象Icon属性,即 SetForm1.Icon=LoadPicture("Myicon.Ico") 图标也可以被赋予除Timer控件和Menu控件以外的其他控件的DragIcon属性,例如: SetCommand1.DragIcon=LoadPicture("Myicon.Ico") 使用LoadPicture可以将图形文件载入到系统剪贴板,程序代码如下: Clipboard.SetDataLoadPicture("Party.Bmp")

如果要将图标赋予窗体,则要把LoadPicture函数的 2.LoadPicture函数实例 本例使用LoadPicture函数将图片加载到窗体的PictureBox控件并从控件上清除掉该图片。程序运行后,单击窗体,即可看到所加载的图片。 对象属性设置如下:BeginVB.FormForm1Caption = "Form1"ClientHeight = 3540ClientLeft = 1650

2.LoadPicture函数实例 Clienttop = 1590ClientWidth = 5010LinkTopic = "Form1"ScaleHeight = 3540ScaleWidth = 5010 BeginVB.PictureBoxPicture1Height = 615Left = 2160

Clienttop = ScaleHeight = 555ScaleWidth = 675TabIndex = 0Top = 1200Width = 735 BeginVB.PictureBoxPicture1Height = 615Left = 2160ScaleHeight = 555ScaleWidth = 675

ScaleHeight = 555BeginVB.PictureBoxPicture1Height = 615Left = 2160ScaleHeight = 555ScaleWidth = 675TabIndex = 0Top = 1200Width = 735EndEndBeginVB.PictureBoxPicture1 程序代码如下:PrivateSubForm_Click()DimMsgAsString'声明变量OnErrorResumeNext'设置错误句柄Height=3990Width=4890'设置高度和宽度Picture1.Picture=LoadPicture(App.Path+"\arrow.CUR",vbLPCustom,vbLPColor,32,32)加载光标IfErrThenMsg="Couldn'tfindthe.curfile." 程序代码如下:MsgBoxMsg'显示错误消息ExitSub'如果发生错误则退出EndIfMsg="ChooseOKtoclearthebitmapfromtheform."MsgBoxMsgPicture1.Picture=LoadPicture()'清除PictureBoxEndSubMsgBoxMsg'显示错误消息 11.3.4Pset、Circle、Line绘图方法 除了图形控件(Line控件、Shape控件)之外,VB还提供了创建图形的一些方法,见表11-2。表11-2创建图形方法 11.3.4Pset、Circle、Line绘图方法表 在任意位置画出图形 用图形方法创建图形是在代码中进行的,这就意味着,必须运行应用程序才能看到图形方法的结果。因而,对于创建界面的简单设计元素来说,图形方法不能代替图形控件的作用。设计时改变图形控件的外观,比修改并测试图形方法的代码容易。 以下简单介绍Pset、Circle和Line方法。 在任意位置画出图形 1.Pset方法 (1)作用:将屏幕上的点设置为指定颜色。 (2)语法:Object.Pset[Step](x,y),[Color]。 (3)参数说明: ˙Object是可选的。即对象表达式,其值为“应用于”列表中的对象。 ˙Step是可选的。该关键字用于指定相对于由CurrentX和CurrentY属性停工的当前图形位置的坐标。 ˙(x,y)是必选的。它是被设置点的坐标。 ˙Color是可选的。用于为点指定RGB颜色。

1.Pset方法(4)Pset方法实例:用Pset方法在窗体上画五色碎纸。SubForm_Click()DimCX,CY,Msg,xPos,yPos'DeclareVariables.ScaleMode=3 '设置ScaleMode为像素DrawWidth=5 '设置DrawWidthForeColor=QBColor(4) '设置前景为红色FongtSize=24 '设置点的大小CX=ScaleWidth/2 '得到水平中点CY=ScalseHeight/2 '得到垂直中点Cls '清窗体(4)Pset方法实例:用Pset方法在窗体上画五色碎纸Msg="HappyNewYear!"CurrentX=CX-TextWidth(Msg)/2 '水平位置CurrentY=CY-TextHeight(Msg) '垂直位置PrintMsg '打印消息DoxPos=Rnd*ScaleWidth '得到水平位置yPos=Rnd*ScaleHeight '得到垂直位置Pset(xPos,yPos),QBColor(Rnd*15) ‘画五彩碎纸DoEvents '进行Loop '其他处理EndSubMsg="HappyNewYear!" 2.Circle方法 (1)作用:在对象上画圆、椭圆或圆弧。 (2)语法:Object.Circle[Step](x,y), Radius,[Color,Start,End,Aspect] (3)参数说明: ˙Object是可选的。对象表达式。 ˙Step是可选的。该关键字用于指定圆、椭圆或圆弧的中心。 ˙(x,y)是必选的。它是被设置为圆、椭圆或圆弧的中心点的坐标。 ˙Radius是必选的。它是半径 2.Circle方法 ˙Color是可选的。它用于指定圆轮廓的RGB颜色。 ˙Start,End是可选的。当圆弧或部分圆或椭圆画完以后,Start和End指定弧的起点和终点位置。 ˙Aspect是可选的。用于指定圆的纵横尺寸比例。 (4)Circle方法实例:用Circle方法在窗体中央画许多同心圆。 SubForm_Click() DimCX,CY,Radius,Limit '声明为变量 ScaleMode=3 '以像素为单位 ˙Color是可选的。它用于指定圆轮廓的RGB颜色。 CX=ScaleWidth/2 'X位置 CY=Scaleheight/2 'Y位置 IfCX>CYThenLimit=CYElseLimit=CX ForRadius=0ToLimit Circle(CX,CY),Radius,RGB(Rnd*255,Rnd*255,Rnd*255) NextRadius EndSub CX=ScaleWidth/2 'X位置 3.Line方法 (1)作用:在对象上画直线和矩形。 (2)语法: Object.Line[Step](x1,y1)[Step](x2,y2),[Color],[B][F] (3)参数说明: ˙Object是可选的。对象表达式。 ˙Step是可选的。该关键字用于指定起点坐标。 ˙(x1,y1)是必选的。是直线或矩形的起点坐标。 ˙Step是可选的。该关键字用于指定相对于起点的终点坐标。 3.Line方法 ˙(x2,y2)是必需的。是终点坐标。 ˙Color是可选的。它用于指定画线时用的RGB颜色。 ˙B是可选的。如果选上该参数,则可利用对角坐标画出矩形。 ˙F是可选的。如果使用了B选项,则F选项规定矩形以矩形边框的颜色填充。不能不用B而用F。如果不用F而只用B,则矩形用当前的FillColor和FillStyle填充。 注:画连接线时,前一条线的终点就是后一条线的起点。线的宽度取决于DrawWidth属性值。 ˙(x2,y2)是必需的。是终点坐标。 11.3.5利用VB进行图像处理 1.在图片上平滑移动文字 要想使文字在图片上平滑移动,可用以下方法实现: (1)新建一工程文件,并创建Form1。在Form1上放置PictureBox控件Picture1,选定背景图片。另外,放置一Timer控件Timer1,设置Enabled属性为True,设置Interval为100。 (2)单击选择Picture1,在PictureBox的底部放置Label控件Label1,并设置Lable1的BackStyle属性为0(透明),设置Caption为待移动的字符串。 各对象属性如下所示: BeginVB.FormForm1 Caption="在图片上平滑移动文字" 11.3.5利用VB进行图像处理ClientHeight=5400ClientLeft=1650ClientTop=1590ClientWidth=8265LinkTopic="Form1"ScaleHeight=5400ScaleWidth=8265BeginVB.PictureBoxPicture1Height=4995Left=135ClientHeight=5400Picture="Form1.frx":0000ScaleHeight=4935ScaleWidth=7920TabIndex=0Top=180Width=7980BeginVB.TimerTimer1Interval=100Left=180Top=3960EndPicture="Form1.frx":0000BeginVb.LabelLabel1Alignment=2BackStyle=0Caption="VB图像处理技术"BeginPropertyFontName="宋体"Size=42Charset=134Weight=700BeginVb.LabelLabel1 Underline=0 Italic=0 Strikethrough=0 EndProperty ForeColor=&H000000FF& Height=1725 Left=945 TabIndex=1 Top=2925 Width=5775

Underline=0 End Eed Eed 程序代码如下: PrivateSubForm_Load() label1.Top=Picture1.ScaleHeight EndSub PrivateSubTimer1_Timer() istep=20 Label1.Top=Label1.Top-istep End IfLabel1.Top<=-Label1.HeightThen'当文字移动到顶部时,重新从底部开始移动 Label1.Top=Picture1.ScaleHeight EndIf EndSub程序代码如下:PrivateDeclareFunctionReleaseDCLib"User32"(ByValHawndAsLong,ByValHdcAsLong)AsLongPrivateDeclareFunctionOpenClipboardLib"User32"(ByValHAwndAsLong)AsLongPrivateDeclareFunctionEmptyClipboardLib"User32"()AsLong IfLabel1.Top<=-Label1.HeighPrivateDeclareFunctionSetClipboardDataLib"User32"(ByValWFormatAsLong,ByValhMemAsLong)AsLongPrivateDeclareFunctionSelectObjectLib"Gdi32"(ByValHdcAsLong,ByValhObjectAsLong)AsLongPrivateDeclareFunctionDeleteDCLib"Gdi32"(ByValHdcAsLong)AsLongPrivateDeclareFunctionBitBltLib"Gdi32"(ByValhDestDCAsLong,ByValXAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopasLong)AsLongPrivateDeclareFunctionSetCl PrivateDeclareFunctionCreateDCLib"Gdi32"Alias"CreateDCA"(ByVallpDriverNameAsString,ByVallpDeviceNameAsString,ByVallpOutputAsString,LpinitDataAsLong)AsLong PrivateDeclareFunctionCreateCompatibleDCLib"Gdi32"(ByValHdcAsLong)AsLong PrivateDeclareFunctionCreateCompatiBlebitmapLib"Gdi32"(ByValHdcAsString,ByValnWidthAsString,ByValNheightAsLong)AsLong

PrivateDeclareFunctionCre PrivateDeclareFunctionCloseClipboardLib"User32"()AsLong ‘函数Screencap()将以(Lt,Top)为左上角坐标,宽度为rWidth、高度为rHeight区域的位图拷贝到剪贴板SubScreencap(Lt,Top,Rt,Bot) rWidth=Rt-Lt rHeight=Bot-Top sourceDC=CreateDC("display",0,0,0) '获得系统显示设备的句柄 PrivateDeclareFunctionClo DestDC=CreateCompatibleDC(SourceDC,rWidth,rHeight) '在内存中建立系统显示器的句柄 bHandle=CreateCompatibleBitmap(Sourcedc,rWidth,rHeight) SelectObjectDestDC,bHandle ‘选定位图与内存相关联BitbleDestDC,0,0,rWidth,rHeight,SourceDC,LT,Top,&hccoo20Wnd=Screen.activeform.hwndOpenClipboardWnd '指定由当前活动窗体独占使用剪贴板 DestDC=CreateCompatibleDC(So EemptyClipboard '将剪贴板清空 SetClipboardData2,bHandle '将内存中的位图拷贝到剪贴板 CloseClipboard '关闭独占方式 DeleeDCDestDC '删除DESTDC ReleaseDCbHandle,Sourcedc ‘释放 bHandle,SourceDCEndSub EemptyClipboard '将剪贴板清空 SubCommand1_Click() Form1.visible=False Screencap0,0,320,240 Form1.visible=True Picture1=Clipboard.getdata() EndSub 程序运行后,单击“捕捉”按钮后,将捕捉以(0,0)为中心的320×240大小的屏幕图像,并放到Picture1中。 SubCommand1_Click() 2.图像的滚动显示和缩放 下面我们介绍如何利用VB的PictureBox和滚动条控件,实现图像的滚动和缩放。程序中使用了两个图片Picture1和Picture2,其中,Picture1作为包容器,Picture2作为子图片框显示图形,配合滚动条控件在包容器内移动子图片框就可实现画面的滚动。Picture2中图形的显示采用了前面介绍过的PaintPicture方法(见6.1.2节),它可以在窗体、图片框上的任何地方绘制图形。 下面先介绍窗体的设计。 2.图像的滚动显示和缩放 如图11-3所示,首先在窗体中放置Picture1作为包容器,然后在其中放置Picture2,最后在窗体中再放置两个滚动条(一个为水平滚动条HScroll1,另一个为滚动条VScroll1)。Picture2的AutoSize属性为True,BorderStyle属性为0,AutoRedRaw属性为True,滚动条的LargeChang和SmallChange属性设为合适大小。 如图11-3所示,首先在窗体中放置Picture1作为包图11-3图像的滚动显示图11-3图像的滚动显示 以下为完整的程序。 各对象的属性定义如下: BeginVB.FormForm1 Caption ="图像滚动显示" ClientHeight =4995 ClientLeft =3165 ClientTop =2445 ClientWidth =6720 LinkTopic ="Form1" ScaleHeight =4995 ScaleWidth =6720 以下为完整的程序。BeginVB.VScrollBarVScroll1Height =4650LargeChange =300Left =6210SmallChange =10TabIndex =3Top =45Width =330EndBeginVB.VScrollBarVScroll1BeginVB.HScrollBarHScroll1Height =330LargeChange =300Left =45SmallChange =10TabIndex =2Top =4365Width =6090EndBeginVB.HScrollBarHScroll1BeginVB.PictureBoxPicture1Height =4155Left =90ScaleHeight =4095ScaleWidth =5940TabIndex =0Top =90Width =6000BeginVB.PictureBoxPicture2BeginVB.PictureBoxPicture1AutoRedraw =-1'TrueAutoSize =-1'TrueBorderStyle =0'NoneHeight =2760Left =630ScaleHeight =2760ScaleHeight =4605TabIndex =1

AutoRedraw =-1'True Top =675 Width =4605 End End End 程序代码如下: Publicc1,c2,c3,c4AsInteger Publictf,d1,d2,d3,d4,blfAsInteger Publicyk,yqAsLong PrivateSubForm_Load() c1=Form1.Width Top =675 c2=Form1.Height blf=100 picture2.Picture=LoadPicture("G:\MyDocuments\实例\corel.jpg") yk=Picture2.Width yg=Picture2.Height EndSub PrivateSubForm_Resize()

c2=Form1.HeightIfWidth>1500AndHeight>1770Then c3=Form1.Width-c1 c4=Form1.Height-c2 Picture1.MovePicture1.Left,Picture1.Top,Picture1.Width+c3,Picture1.Height+c4c1=Form1.Widthc2=Form1.HeightCallpIfWidth>1500AndHeight>1 EndIf Picture2.SetFocus EndSub '以拖放方式滚动画面 PrivateSubPicture2_DragDrop(SourceAsConctrol,xAsSingle,yAsSingle) IfPicture2.Height>Picture.HeightThen'通过计算机鼠标移动位置,调用VScroll_change事件 ccc=VScroll1.Value+(d2-y) Ifccc<=0 EndIf EndIfIfccc>=VScroll1.MaxThenccc=VScroll.MaxEndIfVScroll1.Value=cccEndIfIfPicture2.Width>Picture1.WidthThenccc1=HScroll1.Value+(d1-x)Ifccc1<=0Thenccc1=0EndIfIfc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论