基于Qt的四路视频监控系统中客户端的设计与实现._第1页
基于Qt的四路视频监控系统中客户端的设计与实现._第2页
基于Qt的四路视频监控系统中客户端的设计与实现._第3页
基于Qt的四路视频监控系统中客户端的设计与实现._第4页
基于Qt的四路视频监控系统中客户端的设计与实现._第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、学号:2008840106本 科 毕 业 论 文(设 计)基于Qt的四路视频监控系统中客户端的设计与实现作者姓名段利艳指导教师张永奎 康华 刘燕所学专业计算机科学与技术班级08 GB1所属院系信息学院学习年限2008年9月至2012年7月二一二年六月目 录内容提要I1. 引言12. 开发平台介绍12.1嵌入式系统介绍12.2 硬件平台介绍22.2.1 ARM产品简介22.2.2 SC2400开发板介绍22.3 软件环境32.3.1 Qt Creator开发环境介绍32.3.2 SDL开发包介绍33. 系统需求分析43.1 系统需求分析43.2 可行性分析53.2.1 技术可行性53.2.2 经

2、济可行性53.2.3 操作可行性64. 总体设计64.1 系统总体结构设计64.2 客户端UI界面设计75. 详细设计75.1 与服务器端的SOCKET连接75.1.1 SOCKET连接过程75.1.2 SOCKET创建模型85.1.3 SOCKET创建代码95.2 UI界面四路视频画面显示105.2.1 Qt中用到的基本类的介绍105.2.2 客户端UI设计105.3SDL层显示135.5.1 SDL接口调用135.3.2 双缓存显示机制146.系统测试146.1 系统运行环境146.1.1 硬件配置14v客户端(PC机配置)14v服务器端(ARM板配置)156.1.2 软件环境156.2

3、测试环境156.3代码测试与调试156.4 系统运行测试156.5 测试结果15结语17致谢18附录19参考文献213 基于Qt的四路视频监控系统中客户端的设计与实现学生姓名:段利艳 指导教师:张永奎 康 华 刘 燕内容提要 随着计算机设备的普及和Intenet的广泛应用,多路视频监控的嵌入式系统被运用到生活的各个方面。基于Qt的四路视频监控系统系统主要由数据采集、编码、解码、显示四大模块构成,采用C/S构架。本项目作为C/S构架中的客户端(Client),主要是实现把采集的视频数据经SDL解码后再终端显示。本项目以Qt为开发平台,基于C/S构架,采用socket编程,集数据连接、数据传输、数

4、据显示于一体,界面设计简洁大方,功能清晰。关键词 远程监控 LINUX C/S UII山西大学商务学院本科毕业论文(设计)1. 引言随着计算机设备的普及和Intenet的广泛应用,近年来,远程监控技术在环境监测、工业控制等领域应用越来越广泛。在监控领域,集中了多媒体技术、网络技术等多种计算机技术应用。视频监控系统以其直观、方便、信息内容丰富广泛应用于许多领域。嵌入式视频采集以其小巧灵活、低成本和高性能的特点而独具优势。本题结合Intenet技术和图像视频处理技术,开发一套嵌入式Linux的视频监控系统,实现了独立的嵌入式智能终端设备与Intenet的直接接入,通过网络与后台PC进行通信;在嵌入

5、式智能设备终端上完成图像采集、存储等工作,并通过Intenet传输图像到后台PC。这样,前台作为视频服务器,进行数视频数据采集;后台PC作为客户端,进行数据加工和现实图像。此思路也正是网络视频服务器为核心的第三代全数字化远程视频集中监控模式的发展方向。开发平台介绍2.1嵌入式系统介绍嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等几个部分组成,用于实现对其他设备的控制、监视或管理等功能。与传统的通用计算机、数字产品相比,嵌入式系统具有

6、低功耗、体积小、集成度高、可靠性强、软件硬件可裁剪等特点,并且一般嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行

7、各种复杂的动作和感受各种状态信息。 嵌入式操作系统是嵌入式系统的核心,豳前常用的嵌入式搡作系统主要有:VxWorks、嵌入式Linux、Windows CE等,其中开放源代码的嵌入式Linux是应用最广泛的嵌入式操作系统之一。国外开展嵌入式Linux应用的研究较早,成果较多。例如,韩困三星公司己经率先推出了采用嵌入式Linux的掌上计算机概念样机,两美国网虎公司则推出了精简版嵌入式Linux系统Xlinux。在国内也有多家公司开展相关研究。中软总公司推出的嵌入式Linux30不仅满足了数控机床的需求,同时也可以应用于其他工业控制领域。另外还有华恒公司推出的嵌入式平台产品和红旗Linux等。可见

8、,无论国内外,嵌入式Linux的研究都属于热点领域,而且对其本身的应用已经取得了可观的经济效益。2.2 硬件平台介绍2.2.1 ARM产品简介ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对微处理器的通称,还可以认为是一种技术的名字。ARM处理器是一个32位元精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。据最新消息称,微软在2012年2月29日即将发布的消费者预览版Windows 8操作系统,将支持ARM系列处理器。Windows平板电脑时代即将到来。 ARM处理器特点:体积小、低功耗、低成本、高性能; 支持Thumb(16位

9、)/ARM(32位)双指令集,能很好的兼容8位/16位器件; 大量使用寄存器,指令执行速度更快; 大多数数据操作都在寄存器中完成; 寻址方式灵活简单,执行效率高;指令长度固定。 ARM处理器系列ARM7系列、ARM9系列、ARM9E系列、ARM10E系列; SecurCore系列:Intel的Xscale、Intel的StrongARM ARM11系列。 其中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。2.2.2 SC2400开发板介绍SC2440 是一款真正低

10、价实用的ARM9 开发板,它采用Samsung S3C2440 为微处理器,并采用专业稳定的CPU 内核电源芯片和复位芯片来保证系统运行时的稳定性。mini2440 的PCB 采用沉金工艺的四层板设计,专业等长布线,保证关键信号线的信号完整性,生产采用机器贴片,批量生产。其外观如图2.1所示:图2.1 SC2440开发板外观2.3 软件环境2.3.1 Qt Creator开发环境介绍Qt Creator是跨平台的 Qt IDE, Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集成开发环境(IDE)。此 IDE 能够跨平台运行,支持的系统包括 Linux(32 位及

11、64 位)、Mac OS X 以及 Windows。根据官方描述,Qt Creator 的设计目标是使开发人员能够利用 Qt 这个应用程序框架更加快速及轻易的完成开发任务。在功能方面,Qt Creator 包括项目生成向导、高级的 C+ 代码编辑器、浏览文件及类的工具、集成了 Qt Designer、Qt Assistant、Qt Linguist、图形化的 GDB 调试前端,集成 qmake 构建工具等。 功能和优势:Qt Creator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。本次开发位于Linux环境下,开发工具使用Qt creato

12、r 4.7.1版本。2.3.2 SDL开发包介绍SDL(Simple DirectMedia Layer)是一个自由的跨平台的多媒体开发包,适用于 游戏、游戏SDK、演示软件、模拟器、MPEG播放器和其他应用软件。其中包含了对图像、声音、线程等的支持,且可在多种平台上运行。因为SDL专门为游戏和多媒体应用而设计开发,所以它对图形的支持非常优秀,尤其是对高级图形的能力,比如Alpha混合、透明处理、YUV覆盖、Gamma校正等等。而且在SDL环境中能够非常方便的加载支持OpenGL的Mesa库,从而提供对二维和三维图形的支持。本系统客户端接收到的视频解压后为YUV格式,考虑到SDL在YUV覆盖方

13、面的优势,我们选择SDL实现视频信息接收解压后的显示。3. 系统需求分析3.1 系统需求分析视频监控技术,随着计算机、编解码、网络传输技术的发展,目前正朝着数字化、智能化、IP化、网络化继续发展。同时视频监控同其他技术相结合,产生了许多新的应用,这有助于满足不同视频监控用户的需求。(1)视频监控数字化视频监控发展经历了模拟视频监控、半数字监控、数字监控三个阶段。对于视频监控,数字化存储带来的是一场革命性的变化。数字化是21世纪的时代特征,视频监控的数字化是监控技术的必然趋势。(2)视频监控智能化智能化是视频监控技术发展比较高级的层次。由于视频监控的数据量非常大,而用户真正需要的信息只是少部分,

14、或者说真正需要监视的只是发生概率很少的某些事件,如何通过海量数据获取有价值的信息或者说如何从目视解释变为机器自动解释是视频监控技术发展的一个新方向。因为能把视频监控从静态的、事后取证变成动态的、实时预防和报警对用户来说显得更加重要。实际上现有的监控系统都配置有如自动位移侦测、昼夜自适应切换存储、预警设置(如可疑人物照片、指纹等)等一些低级形式的智能化功能。随着技术的发展,全智能的监控系统将要求事发前能够识别并作出正确的判断,为人们提供最为有效、及时的快速反应措施。(3)视频监控IP化视频网络、IPTV等都是网络快速发展的重要应用。随着Internet技术的发展,基于IP的视频监控更能为人们所接

15、受,网络摄像机把压缩的视频信息通过TCP/IP协议,采用流媒体技术实现视频在网上的多路复用传输,拥有授权的用户可以随时访问互联网,实现对整个监控系统的指挥、调度、存储、授权控制等功能。鉴于IPv6在服务质量、网络性能、安全性改善提高一级IPv6对下一代Internet网络的影响,基于IP的视频监控将会成为主流。(4)视频监控无线化无线化包括两方面内容:一是监控中心的移动,通常情况下,被监控对象或是摄像机往往是固定的。而作为监控系统的使用者(监控中心)则可以是动态的,当公司领导出差在外,需了解公司生产情况时,可使用笔记本随时随地访问摄像机的IP获取信息。二是视频监控网络的无线化,随着无线宽带网络

16、发展,基于3G的无线视频应用备受关注。当监控点分散且与监控中心距离较远,或被监控对象不固定(如出租车、运钞车等)时,利用传统有线网络的视频监控对象往往成本高且难以实现,而基于多种无线传输手段的移动视频监控实现了不可替代的优势。3.2 可行性分析使用嵌入式系统实现远程视频监控技术,符合网络化数字化的特点,对公安、安防等行业有着重要的现实意义。视频监控系统一般采用基于PC机平台视频采集卡的形式,该方案系统体积大、成本高,在远距离、多点系统中实现困难。本课题所设计的系统成本低,操作简易,安装方便,即插即用,体积小巧。整个系统采用ARM9处理器S3C2440作为系统核心,外接红外触发开关,可以检测例如

17、人,动物等并启动视频监控。3.2.1 技术可行性软件平台由三部分组成:系统引导加载程序、嵌入式Linux内核、文件系统及应用程序。嵌入式操作系统采用Linux,开发模式采用最为普遍的宿主开发模式,即在宿主机上编译内核及应用程序然后通过网口下载到目标平台上运行,通过打印终端打印调试信息。文件系统是嵌入式系统软件平台占用存储量最大的一部分,它存储了系统配置文件、系统程序和系统外设驱动程序。嵌入式Linux内核移植好后,主要工作就变成在操作系统下编写驱动程序。系统主要由视频采集和传输部分组成。有嵌入式处理器、CMOS图像传感器、存储器、以太网接口。嵌入式处理器是韩国三星公司的基于ARM920T内核的

18、16/32 位RISC嵌入式微处理器(型号:S3C2440),主要面向高性价比、低功耗的应用。为了处理图像数据,CPU的工作频率可达400MHz。S3C2440的资源包括LCD控制器,SDRAM控制器,摄像头接口,3路串行接口,IIC BUS接口,USB接口,触摸屏接口。在处理器丰富资源的基础上,还进行了相关的扩展,配置了256M Flash ROM和64MB SDRAM。在嵌入式处理器的控制下,CMOS图像传感器(片上)采集到的数据经帧同步信号触发产生中断后被拷贝到SDRAM,经过MPEG-4编码后由网口发送到远端监控中心显示。3.2.2 经济可行性经济可行性主要是对项目的经济效益进行评价。

19、Linux的低成本和开放性,使其广泛应用于嵌入式系统领域。本系统客户端运行于LINUX上,而服务端运行于高性价比的SC2440的arm开发板上。3.2.3 操作可行性本项目开发工具为Qt Creator,作为用户终端监控平台,对本系统界面有跨平台的要求;作为网络监控手持终端,要求本系统界面能在嵌入式系统上运行。因此选用Qt编写本业务监控系统图形界面。Qt是一个多平台的C+图形用户界面应用程序框架。它完全面向对象,有良好的封装机制,模块化程度高,可重用性好,容易扩展,允许真正的组件编程,提供给应用程序开发者建立艺术级图形用户界面所需的功能,提供了信号储机制替代回调函数,使组建间信号传递更安全、简

20、单。它拥有强大类库,而且具有一个包括Qt设计者、语言学家和详细联机开发文档的跨平台开发环境。4. 总体设计4.1 系统总体结构设计SC系统软件主要有两部分:系统构建模块和软件监控模块。系统构建模块包括U。BOOT的移植、linux26内核的移植及相关驱动程序的移植和开发(包括网卡、LCD显示屏、USB系列设备等)、根文件系统的构建和Qt用户接踞的移植。软件监控模块包括USB视频采集模块、LCD显示模块、服务端程序模块、控制端模块和网络模块。控制端可以PC机为主,也可采用另外一台ARM架构的设备为主,通过浏览器来监控与操控服务端。本系统通过网络实现客户端(PC机)与服务端(ARM9开发板)进行通

21、信;在服务端ARM开发板直接连接摄像头,完成图像采集、编码、存储等工作,并通过Intenet传输图像到客户端PC。PC机中运行客户端界面,将解码后的帧经SDL处理后再Qt开发的窗口中显示。具体过程如图4.1所示:LINUX(PC)SC2440(ARM)Socket通信视频采集数据数据编码SDL层显示数据解码UI界面显示Uboot移植数据传输 图4.1 功能模块图4.2 客户端UI界面设计在四路视频监控系统中,客户端运行于LinuxPC机上。在此客户端中,实现的功能有:与服务器的连击、监控点的选择、视频画面展示等功能。视频画面显示采用双缓存显示机制,保证视频画面质量。具体功能如下图显示:客户端U

22、I界面SDL层显示UI界面四路视频画面显示与服务器端的SOCKET连接画面显示连接选择IP设置提高视频显示质量双缓存显示图4.2 UI界面功能图详细设计5.1 与服务器端的SOCKET连接所谓socket通常也称作套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。socket用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。5.1.1 SOCKET连接过程根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务

23、器监听,客户端请求,连接确认。 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。 客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求

24、。5.1.2 SOCKET创建模型Server-Client模型的程序的开发原理如图5.1所示: Socket()Socket()Bind()Conect()Listen()建立连接Write()Accept()发送数据Read()Read()接收数据Close()Write()Close()图5.1 Socket编程模型服务器,使用Server_Socket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Socket对网络上

25、某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。 Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。5.1.3 SOCKET创建代码客户端Socket创建int open_clientsock(char *

26、address, int port) struct sockaddr_in servadr; int client_handle; /* Create a new socket */ if (client_handle = socket (AF_INET, SOCK_STREAM, 0) = -1) exit_fatal (Error opening socket Abort !); initaddr (&servadr,address,port); if (connect(client_handle,(struct sockaddr *) &servadr, sizeof (struct s

27、ockaddr) = -1) exit_fatal (connect failed Abort !); return client_handle;客户端Socket关闭voidclose_sock (int sockhandle) close (sockhandle);Socket接收消息Int read_sock (int sockhandle, unsigned char *buf, int length) int byte_read = -1; unsigned char *ptbuf =buf; int mlength = length; int i = 0; do byte_read

28、 = read (sockhandle, ptbuf,mlength);if (byte_read 0) ptbuf = ptbuf+byte_read; mlength = mlength-byte_read;i+;if(i 10000) return -1; while (mlength 0); return (mlength);Socket发送消息Int write_sock (int sockhandle, unsigned char *buf, int length) int byte_send = -1; byte_send = write (sockhandle, buf, le

29、ngth); return (length - byte_send);5.2 UI界面四路视频画面显示5.2.1 Qt中用到的基本类的介绍Qt是一个1991年由奇趣科技开发的跨平台C+图形用户界面应用程序开发框架。它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。Qt是面向对象语言,易于扩展,并且允许组件编程。Qt拥有十分强大的类库,拥有400多个面向对象的类,它们带有大多数构建跨平台服务器与客户端程序的底层基础构造函数。Qt的类库可以分成三部分:组件(Components)、框架(Framework)、效用工具(Utilities)。其中组件包括环境、主窗VI和相关类

30、、标准对话框、基本窗VI部件、高级窗VI部件、组织者及帮助系统;框架包象、模型、抽象窗VI部件、图形和打印、拖放、窗VI部件外观和布局管理;效用工具包括通用工具类、图像处理、日期与时间、IO处理和杂项。在程序设计中最常用的类包括QObject、QApplication、QWidget、QMainWindow、QIayout、QEvent等 。5.2.2 客户端UI设计通过QT 设计器,将所要用到的菜单、窗口进行设计实现。Qt 设计器支持一种基于工程的程序设计方法。首先创建一个工程(.pro后缀的文件),有了该工程文件就可以用利用QT提供的工具qmake来生成makefiles用于编译链接。菜单

31、、窗体设计被保存成XML格式的.ui文件并且被uic(用户界面编译器)转换成为C头文件和源文件。利用QT设计器完成的菜单、窗体设计只是个界面架构。其完成的特定功能还需要编程实现。在窗体的.ui 文件中,可以通过增加新的功能函数实现其特有的功能。界面设计框架如图5.2所示:图 5.2 界面设计框架整个GUI 系统只有一个GUI进程作为主进程,其他非GUI进程通过QThread在GUI进程中创建新的子进程实现相应的功能。该窗口实现类如下所示:class MainWindow : public QMainWindow Q_OBJECTpublic: explicit MainWindow(QWidg

32、et *parent = 0); MainWindow();private slots: void setting();private: Ui:MainWindow *ui; QAction* settingAct; QMenu* fileMenu; QFrame* centralFrame; QGridLayout *gridlayout; QVector videos; QVector threads;本窗口进程通过启用线程来调用程序使得窗口显示画面,调用实现如下代码所示:CamThread:CamThread(long camID,long winID) _camID = camID;

33、_winId = winID;void CamThread:run() sleep(1); char buff128=0; QSettings settings(QString(config.ini), QSettings:IniFormat); sprintf(buff,cam%ld, _camID); char* value = settings.value(buff, ).toByteArray().data(); sprintf(buff,./spcaview -w %s -x 0x%lx, value, _winId); _stream= popen(buff,r); exec();

34、每个窗口可以进行IP设置,根据所监视服务器IP地址设置监控连接,实现效果如图5.3所示:代码设置如下:namespace Ui class SettingDialog;class QGridLayout;class QLineEdit;class SettingDialog : public QDialog Q_OBJECT 图 5.3 IP设置界面public: explicit SettingDialog(QWidget *parent = 0); SettingDialog(); void LoadSetting(); void SaveSetting();private: Ui:Set

35、tingDialog *ui; QGridLayout* gridlayout; QLineEdit* edit0; QLineEdit* edit1; QLineEdit* edit2; QLineEdit* edit3;SDL层显示5.5.1 SDL接口调用SDL在Linux平台下的接口:视频显示使用X11,利用XFree86 DGA扩展的优势,全屏显示使用新的w MTRR加速。 声音使用OSS API。 使用clone()系统调用和SysV IPC,或者glibc-2.1的pthreads实现线程。通过SDL_GetWMInfo()取得SDL驱动接口的隐藏部分,从而可以实现诸如去除窗口要

36、素和图标化窗口等效果。 SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”:SDL_image支持时下流行的图像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。SDL_mixer更多的声音输出函式以及更多的声音格式支持。SDL_net网络支持。SDL_ttfTrueType字体渲染支持。SDL_rtf简单的RTF渲染支持。本客户端留出接口,另外启用线程调用SDL层在客户端界面显示视频。具体实现如下:class

37、SDLTestThreadpublic: SDLTestThread(long winID); long _winId; FILE* _fId;SDLTestThread:SDLTestThread(long winId) _winId = winId; if(1) SDL_Thread *thread; thread = SDL_CreateThread(thread_func, this); if ( thread = NULL ) fprintf(stderr, 无法创建线程: %sn, SDL_GetError(); return; /SDL_WaitThread(thread, NU

38、LL); 5.3.2 双缓存显示机制本客户端启用线程调用SDL显示,在窗口画法中加入双缓存机制,提高在客户端窗口中的显示速度,从视觉上保证显示质量!Tryif(SDL_Flip(pScreen)!=0)/ShowtheSDLwindowssurface.throwSDL_GetError();catch(constchar*s)std:cerrSDL_Flip()failed!nsformat-palette;SDL_Color *saved_colors = NULL;if ( pal & !(SDL_VideoSurface-flags & SDL_HWPALETTE) ) /* simu

39、lated 8bpp, use correct physical palette */saved_colors = pal-colors;if ( video-gammacols ) /* gamma-corrected palette */pal-colors = video-gammacols; else if ( video-physpal ) /* physical palette different from logical */pal-colors = video-physpal-colors;rect.x = 0;rect.y = 0;rect.w = screen-w;rect

40、.h = screen-h;if ( SHOULD_DRAWCURSOR(SDL_cursorstate) ) SDL_LockCursor();SDL_DrawCursor(SDL_ShadowSurface);SDL_LowerBlit(SDL_ShadowSurface, &rect,SDL_VideoSurface, &rect);SDL_EraseCursor(SDL_ShadowSurface);SDL_UnlockCursor(); else SDL_LowerBlit(SDL_ShadowSurface, &rect,SDL_VideoSurface, &rect);if ( saved_colors ) pal-colors = saved_colors;/* Fall through to video surface update */screen = SDL_VideoSurface;if ( (screen-f

温馨提示

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

评论

0/150

提交评论