Windows Mobile 设备的摄像头应用开发【毕业论文】

Windows Mobile 设备的摄像头应用开发【毕业论文】

ID:463719

大小:2.93 MB

页数:40页

时间:2017-08-05

上传者:U-944
Windows Mobile 设备的摄像头应用开发【毕业论文】_第1页
Windows Mobile 设备的摄像头应用开发【毕业论文】_第2页
Windows Mobile 设备的摄像头应用开发【毕业论文】_第3页
Windows Mobile 设备的摄像头应用开发【毕业论文】_第4页
Windows Mobile 设备的摄像头应用开发【毕业论文】_第5页
资源描述:

《Windows Mobile 设备的摄像头应用开发【毕业论文】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

本科毕业设计(20届)WindowsMobile设备的摄像头应用开发 摘要摄像头作为一种视频终端设备,被广泛运用于图像视频采集。普通的人也可以彼此通过摄像头在网络进行有影像、有声音的交谈和沟通。另外,人们还可以将其应用于当前各种流行的数码影像,影音处理中。随着多媒体技术和网络技术的发展,摄像头将在未来的很长时间内得以更广泛的应用,对其应用进行开发就具有很重要的现实意义。同时随着摄像头技术的提高与应用软件的不断更新,摄像头不再只是用做聊天的工具,其用途越来越多,应用范围也越来越广。随着嵌入式系统的不断发展,一种新的图像采集系统-基于嵌入式的图像采集系统得到广泛的关注和研究。嵌入式图像采集系统以其结构简单、成本低、体积小、灵活性好等众多优点有效地克服传统图像采集系统的缺点,具有广阔的发展前景。本文主要首先通过对WindowsMobile操作系统的内核、图形窗口与事件子系统和文件系统的研究,理解WindowsMobile操作系统运行环境和结构特点。其次在研究理解摄像头在智能设备中的工作原理的基础上通过VisualStudio2008集成开发环境对基于WindowsMobile系统操作平台的摄像头实现开发应用。关键词:摄像头;嵌入式;图像处理 AbstractCameraasvideoterminalequipmentiswidelyusedinimagevideocapture.Ordinarypeoplecannetworkwitheachotherthroughthecameraforavideo,avoiceconversationandcommunication.Inaddition,cameracanalsobeusedinthecurrentvarietyofpopulardigitalimage,audioandvideoprocessing.Withthedevelopmentofmultimediaandnetworktechnology,camerawillbewidelyusedinthefuture.Sotheapplicationdevelopmentofthecameraisveryimportant.Atthesametime,ascameratechnologyimprovesconstantlywiththedevelopmentofapplicationsoftware,thecameraisnolongerjustusedasachattool,itsuserserinoisbecomingwiderandwider.Withthecontinuousdevelopmentofembeddedsystems,anewimageacquisitionsystem,whichbasedonembeddedimageacquisitionsystemhasbeenreceivedextensiveattentionandresearch.Embeddedimageacquisitionsystemwithitssimplestructure,lowcost,smallsize,flexibilityandotheradvantagesofeffectivelyovercometheshortcomingsofthetraditionalimageacquisitionsystemhasbroadprospectsfordevelopment.Inthispaper,thekernelofWindowsMobileoperatingsystem,thegraphicswindowwiththeeventsubsystemandfilesystemresearchwillbeintroducedfirst.TheWindowsMobileoperatingsystemruntimeenvironmentandstructuralcharacteristicswillbestudiedsecondly.Thirdly,basedontheprincipleofcamerainsmartdevices,theapplicationdevelopmentofcameraonWindowsMobiledeviceviavisualstudio2008willbestudied.KeyWords:Camera;embedded;imageprocessing 目录1 引言11.1研究背景11.2研究内容11.3研究现状22 WINDOWSMOBILE平台与摄像头42.1WindowsMobile操作系统环境与结构特点42.1.1内核42.1.2图形窗口与事件子系统42.1.3文件系统62.2WindowsMobile程序与桌面Windows程序的差异62.2.1内核差异62.2.2硬件差异62.2.3接口函数差异72.3摄像头原理73WINDOWSMOBILE设备的摄像头应用开发93.1开发环境搭建与配置93.2WindowsMobile平台上摄像头的控制与操作93.3应用软件的设计与实现113.3.1设置图像信息的路径113.3.2设置图像信息的文件名133.3.3设置图像信息的大小143.3.4设置图像信息的质量163.3.5设置图像信息的滤镜183.3.6浏览图像信息194 结论21致谢22 参考文献23附录应用程序源代码25 1 引言1.1研究背景视频和图像是能对客观事物进行直观的表达,是人们生活中重要的信息载体。特别是在现在高速发展的信息时代,随着电子技术和网络的发展,图像采集设备也在经历着日新月异的变革[1]。图像处理技术是随计算机技术的发展而诞生。它起源于20世纪20年代,随着社会的进步和发展,在进入20世纪90年代后,图像处理技术逐渐与人类生活和社会发展的各个方面发生联系,成为无论是工作,生活,学习乃至是社会科学等各领域的研究对象[2]。随着图像处理技术和计算机技术的快速发展,各种各样的数字图像处理系统孕育而生。而移动智能设备技术的飞速发展,使得以嵌入式系统为核心的图像处理系统能够成为现实。嵌入式图像采集处理系统将图像采集和图像处理结合在一起,有效的提高了工作效率,具有广阔的市场应用前景。因此,基于WindowsMobile系统的嵌入式智能设备图像采集处理技术在当前正处于蓬勃发展阶段,具有广阔的研究前景,可广泛应用于工业自动化生产,监护、防盗系统,机器人视觉等技术中[3]。1.2研究内容本文主要通过理解WindowsMobile系统操作平台和WindowsMobile设备上摄像头工作的基本原理,研究WindowsMobile设备上通过摄像头实现图片和视频信息的获取,并且通过VisualStudio2008集成开发环境对由摄像头获取的图像信息进行图片和视频的应用开发。1.首先通过对WindowsMobile操作系统的内核、图形窗口与事件子系统和文件系统的研究,理解WindowsMobile操作系统运行环境和结构特点。WindowsMobile操作系统是基于智能移动设备的操作系统,虽然它是由桌面Windows操作系统发展而来,但是它在很多方面都与桌面Windows系统有着很大的差异,为了更好的研究基于WindowsMobile操作系统的摄像头的开发应用,必须更多的了解它们之间的区别和联系。本文 从内核,硬件和接口函数三个方面了解两个操作系统之间的差异。例如:存储空间,硬件特征,API函数,电源管理和程序的调试与测试等方面。2.其次,研究理解摄像头的工作原理。通过对WindowsMobileAPI中提供的摄像头接口和PocketBuilder开发环境中提供的摄像头接口这两大接口的研究,理解摄像头在智能设备中的工作原理。3.在理解WindowsMobile系统操作平台和摄像头的工作原理后,通过VisualStudio2008集成开发环境对基于WindowsMobile系统操作平台的摄像头实现开发应用。包括如何通过智能设备上的摄像头获取图像信息,如何设置图像信息的存储路径,更改图像信息的存储文件名,设置图像信息的存储大小,设置图像信息的质量和滤镜,最后再在模拟器和真机上调试程序,达到对摄像头进行仿真和测试的目的。1.3研究现状摄像头作为一种视频终端设备,随着多媒体技术和网络技术的发展将在未来的很长时间内得以更广泛的应用,对摄像头的应用与开发就具有很重要的现实意义和研究价值。同时随着摄像头技术的提高与应用软件的不断更新,摄像头不再只是用做聊天的工具,其用途越来越多,应用范围也越来越广。特别是近年来在各种嵌入式系统中摄像头的应用也越来越广泛。厦门大学的董珉在他的《基于WindowsMobile嵌入式系统的人脸识别技术研究及应用》一文中重点探讨了如何在WindowsMobile智能设备上设计和实现人脸识别系统。首先利用WindowsMobile5API从设备的摄像头获取人脸图像,再通过人脸检测算法与人脸图像数据库进行比较,最终实现人脸识别。东南大学的吴琼在他的《采用USB摄像头的嵌入式远程视频监控系统的设计》一文中论述了根据摄像头在视频监控系统中的应用,利用Linux嵌入式系统开发技术与Internet技术,根据固定场所使用的特点,提出了一种采用USB摄像头的嵌入式远程视频监控系统实现方案,实现对固定场所的远程视频监控。大连理工大学的王晓飞在他的《基于RTSJ的摄像头控制系统的研究与应用》一文中从实际的企业需求出发,在实时模型指导下开发了基于RTSJ(实时Java规范) 的USB摄像头控制系统。从摄像头采集视频数据,接收用户操作指令拍摄视频,抓取图片,对摄像头的各项属性进行调整等各方面克服了普通控制系统不能满足实时性要求的缺点。2 WindowsMobile平台与摄像头WindowsMobile是微软公司为移动智能设备设计的操作系统。目前比较普遍 的版本是WindowsMobile6.0,其核心是WindowsCE,它是专门为移动智能设备开发的一个操作系统[4]。本章内容主要介绍了WindowsMobile嵌入式操作系统的结构特点和软件运行环境,为本文在WindowsMobile嵌入式操作系统上实现摄像头的应用开发做铺垫。2.1WindowsMobile操作系统环境与结构特点WindowsMobile操作系统为工作和生活展开了一种全新的开发蓝图。这个开放的、可裁剪的、32位的实时嵌入式操作系统成功的将桌面Windows平台延伸到移动硬件设备之上,而它的操作系统在保证程序兼容性的同时,并且支持更广泛的开发应用环境[5]。WindowsMobile的主要特点包括:可裁剪性高,多硬件支持,高度的模块化,实时性支持比较稳健,开发环境非常强大,还有就是具有丰富的现成资源[6]。WindowsMobile系统结构如图2-1所示。2.1.1内核由于WindowsMobile系统是由桌面Windows系统发展而来的,所以WindowsMobile系统具有许多桌面Windows系统的优点:抢占执行与保护模式运行机制,多任务和多线程;具备一切基本的系统服务,例如线程处理,进程管理和内存资源管理等[7]。2.1.2图形窗口与事件子系统WindowsMobile构建了GWES模块,即图形窗口和事件子系统。WindowsMobile的GWES可以让用户使用许多特殊的应用,例如手写输入,声音识别等功能[8]。GWES的结构图如图2-2所示。 图2-1WindowsMobile系统结构图图2-2GWES结构图 2.1.3文件系统WindowsMobile的文件系统主要是支持信息在RAM中的持久存储管理。它的文件分配表也可以当做是存储卡:它能单独处理存储卡的每个分区,使多文件支持成为可能。2.2WindowsMobile程序与桌面Windows程序的差异智能设备的硬件环境和PC具有很多相似之处,当然他们之间也是有很多不同的地方,具体表现在如下几个方面。2.2.1内核差异WindowsMobile是基于嵌入式系统平台的,它的内核采用动态链接库(DLL)实现,这样就能使系统的可用内存空间能够得到最大限度的利用。为了将应用程序的尺寸裁剪的尽量小以适应嵌入式系统,它的程序之间可以共享使用可载入式的动态链接库,以尽可能多的降低驻留在内存上的代码量[9]。2.2.2硬件差异通常WindowsMobile嵌入式系统的内存要比桌面操作系统小很多,而且这些系统一般不可能外接大容量的存储设备。所以在移植桌面系统时,在保证不影响移植后的程序在嵌入式系统中正常运行的基础上尽量得将程序的尺寸进行裁剪。WindowsMobile程序通常运行于没有PC那么强大的硬件环境上。因此,WindowsMobile系统上的程序开发,需要通过模拟器加快开发的进度,但是开发后的程序也必须在实际的硬件设备上测试,以保证其运行的正常。WindowsMobile系统一般使用电池供电,电源的续航能力十分有限,所以程序应该尽可能少地消耗电量。为了节省电量,WindowsMobile智能设备在系统中设置了休眠状态,即在设备不在使用的时候高耗能的设备会被暂时关闭,尽可能的减少电源的消耗。当系统再次被激活的时候,应用程序就从休眠中恢复。 2.2.3接口函数差异WindowsMobile的API是Win32API的一个子集,是精简其中部分函数的实现。所以WindowsMobile虽然支持Win32的结构化异常处理,但却并不支持C++异常处理。但是WindowsMobile的应用程序接口中也加入了一些适用于嵌入式系统的特定功能,例如触摸屏和摄像头等。桌面Windows应用不使用仿真器,而WindowsMobile系统的大部分调试与测试工作要在开发工具提供的仿真环境中进行,因为WindowsMobile系统API包含用于调试的接口(DebugActive和DebugEvent)可用来建立系统内部调试[10]。2.3摄像头原理摄像头是一种视频输入设备,被广泛运用于图像视频采集。普通的人也可以彼此通过摄像头在网络进行有影像、有声音的交谈和沟通[11]。另外,人们还可以将其用于当前各种流行的图像信息处理。摄像头分为数字摄像头和模拟摄像头两大类。模拟摄像头可以将设备采集来的模拟信号转换成数字信号,然后储存在计算机里。而数字摄像头可以直接采集图像和视频信号,然后通过程序接口发送给计算机[12]。摄像头的工作原理大致为:景物通过镜头生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过USB接口传输到电脑中处理,通过显示器就可以看到图像了。据IT行业硬件发展的“摩尔定律”来看,数字摄像头也同样遵循其发展规律的,相信在未来几年内会发展的很快。从目前市场情况来看,制约摄像头发展的因素主要有以下几个方面的原因:1、摄像头市场起步较晚,消费者认知度、接受度较低,所以普及率较低,市场容量增大速度不够快,需要加以一定引导来推动市场消费。2、摄像头的实际应用不够广泛,有一定的局限性,目前还是作为一种消费类产品在销售,消费者只是把它作为视频聊天、制作简单的个人影像集、简单的监视系统等的工具。 3、现在电脑硬件的限制,如电脑显示卡、显示器的分辨率和USB接口速度,影响了高像素摄像的真正普及。 3WindowsMobile设备的摄像头应用开发3.1开发环境搭建与配置VisualStudio是一套完整的开发工具集,用于生成ASP.NETWeb应用程序、XMLWebServices、桌面应用程序和移动应用程序。VisualBasic、VisualC++、VisualC#和VisualJ#全都使用相同的集成开发环境(IDE),利用此IDE可以共享工具且有助于创建混合语言解决方案。另外,这些语言利用了.NETFramework的功能,通过此框架可使用简化ASPWeb应用程序和XMLWebServices开发的关键技术。本软件以WindowsMobile6.0为操作系统平台,以多普达T8588为硬件设备(采用WindowsMobile6.5Professional系统),在VisualStudio2008和WindowsMobile6.0ProfessionalSDK的集成开发环境中,使用C#语言进行托管代码的应用开发。3.2WindowsMobile平台上摄像头的控制与操作微软推出WindowsMobile5.0后,对摄像头应用程序接口进行了重新编写,使得开发者为内置摄像头的智能设备开发应用软件变得简单许多。现在智能设备上的摄像头操作方式一般有:使用WindowsMobile5.0API中提供的摄像头接口类;使用PocketBuilder环境提供的移动设备摄像头接口[13]。WindowsMobile5.0通过集成的摄像头应用程序编程接口(API)提供优秀的多媒体支持,这些应用程序编程接口使开发者能够将摄像头和图像信息功能直接嵌入到应用程序中[14]。它还包括大量新增的多媒体API。WindowsMobile中和Camera相关的API如表3-1所示。利用WindowsMobileAPI控制智能设备摄像头捕获图像或视频流的流程如图3-1所示。 表3-1WindowsMobileCamera相关API方法名称描述CAMERACAPTURE_MODE枚举捕捉模式CAMERACAPTURE_STILLQUALITY枚举捕捉图像质量CAMERACAPTURE_VIDEOTYPES枚举摄像头类型SHCAMERACAPTURE定义捕捉的图像或视频流的文件属性结构及摄像头设置参数SHCameraCapture图像或视频流捕捉函数CameraCaptureDialog图像捕捉对话框类图3-1利用WindowsMobileAPI捕获图像或视频流的流程为了智能设备的开发,Sybase公司专门设计了一套综合开发环境(PocketBuilder),它是移动智能设备PAD(快速开发环境)的典型代表[15]。为了可以更方便的对智能设备的摄像头进行控制和操作,PocketBuilder开发环境提供了嵌入式移动设备摄像头接口Camera对象。目前该对象支持的摄像头类型如下:GeneralWindowsMobile5.0,VEO130S,HpPhotosmart和HTCusingIACamera[16]。 3.3应用软件的设计与实现在理解WindowsMobile系统操作平台和摄像头的工作原理后,通过VisualStudio2008集成开发环境对基于WindowsMobile系统操作平台的摄像头实现开发应用。3.3.1设置图像信息的路径第一步,在模拟界面上设置图像信息的保存路径。在路径选择控件中选择将图像信息的路径设置为Temp,那么当由摄像头获取的图像信息将保存在Temp这个文件夹中。界面如图3-2~图3-4所示。在VisualStudio2008开发软件上实现这一功能的程序模块是:DirectoryBrowserdirectory=newDirectoryBrowser();directory.ShowDialog();if(directory.DialogResult==DialogResult.OK&&directory.SelectedDirectory!=string.Empty){PictureDirectoryPath.Text=directory.SelectedDirectory;}图3-2选择设置路径操作界面 图3-3选择图片保存路径图3-4设定图片保存路径 3.3.2设置图像信息的文件名第二步,设置图像信息文件名。我们将图像信息的文件名设置为MyPicture。那么,当摄像头获取图像信息后,这个图像信息将以MyPicture的文件名保存在之前设置的路径Temp中。如图3-5和图3-6所示。实现这一功能的程序模块是:if(textDefaultFileName.ReadOnly){textDefaultFileName.ReadOnly=false;btnSetName.Text=Coding4FunCamera.Properties.Resources.ApplySetFileName;}else{textDefaultFileName.ReadOnly=true;btnSetName.Text=Coding4FunCamera.Properties.Resources.SetFileName;}图3-5选择设置文件名操作界面 图3-6设置图片文件名3.3.3设置图像信息的大小第三步,设置图像信息的大小。我们把将要保存的图像信息的大小设置为200*200的大小。那么,这个由摄像头获取的图像信息将以200*200的大小保存到之前设置的指定的文件夹中。界面如图3-7和图3-8所示。实现这一操作的程序模块是:if(textWidth.ReadOnly){btnSetResolution.Text=Coding4FunCamera.Properties.Resources.ApplyEditingButtonText;textHeight.ReadOnly=false;textWidth.ReadOnly=false;}else{btnSetResolution.Text=Coding4FunCamera.Properties.Resources.EditButtonText;textHeight.ReadOnly=true; textWidth.ReadOnly=true;}图3-7选择设置图片大小操作界面图3-8设置图片大小 3.3.4设置图像信息的质量第四步,设置由摄像头获取的图像信息的质量。打开质量控件在Default,Low,Normal,High四种质量中选择某一质量要求。我们将图像信息的质量设置为Normal。那么,获取的图像信息将以Normal的质量要求保存进指定的文件夹中。实现这一功能的设置界面如图3-9所示。图3-9控制图片质量模块界面演示如图3-10和图3-11所示。 图3-10选择设置图片质量操作界面图3-11设置图片质量 3.3.5设置图像信息的滤镜第五步,设置此图像信息的滤镜。滤镜选择界面有彩色、黑白和SepiaTone三个滤镜可以选择,我们将这个图像信息的滤镜设置为彩色。那么,当我们浏览这个图像信息的时候,我们将看到彩色的图像信息。实现这一操作的功能模块是RadioButton,如图3-12所示。Windows窗体RadioButton控件为用户提供由两个或多个互斥选项组成的选项集。当单击RadioButton控件时,其Checked属性设置为true,并且调用Click事件处理程序。当Checked属性的值更改时,将引发CheckedChanged事件。如果AutoCheck属性设置为true(默认值),则当选择单选按钮时,将自动清除该组中的所有其他单选按钮。通常仅当使用验证代码确保选定的单选按钮是允许的选项时,才将该属性设置为false。控件内显示的文本使用Text属性进行设置,该属性可以包含访问键快捷方式。访问键允许用户通过按Alt键和访问键来“单击”控件。如果Appearance属性设置为Button,则RadioButton控件的显示与命令按钮相似,选中时会显示为按下状态。通过使用Image和ImageList属性,单选按钮还可以显示图像。图3-12设置图片滤镜 3.3.6浏览图像信息最后,当我们把摄像头获取的图像信息以我们的要求保存后,我们可以在模拟界面上浏览这个图像信息。打开浏览界面,我们可以找到我们保存的图像信息,打开图像信息文件我们就可以看到我们保存的图像信息了。如图3-13、图3-14和图3-15所示。图3-13选择浏览图片界面 图3-14浏览图片图3-15浏览图片 4 结论本文主要对基于WindowsMobile的嵌入式系统摄像头的开发应用的研究意义,研究方法和具体研究进行了论述。分析基于WindowsMobile的嵌入式系统的软件开发环境的结构特点,对比WindowsMobile嵌入式系统和传统的桌面Windows系统的差异,结合嵌入式设备应用的特殊软件运行环境,增进对WindowsMobile的嵌入式操作系统的理解,掌握在WindowsMobile的嵌入式系统平台下对摄像头开发应用研究与实现的方法。将嵌入式和图像处理技术的概念结合起来,设计并实现基于WindowsMobile的图像处理系统。本系统基于VisualStudio2008开发实现,完成基于WindowsMobile操作系统的图像处理应用程序的开发、调试与测试流程,最后通过仿真模拟来实现设置图像信息的存储路径,更改图像信息的存储文件名,设置图像信息的存储大小,设置图像信息的质量和滤镜,最后再在模拟器上浏览图片的具体操作。 参考文献[1]唐磊.基于S3C2440ARMLinux图像采集系统的研究[D].武汉科技大学:控制理论与控制工程.2008.[2]阮秋琦.数字图像处理学[M].北京:电子工业出版社,2001.[3]文军,何为,谯小艳等.基于嵌入式系统的输电线舞动在线监测系统[J].电工电能新技术,2010,29(1):71-75.[4]MicrosoftWindowsMobile[EB/OL].http://www.microsoft.com/china/windowsmobile/default.mspx.2008[5]黄晓昆.WindowsMobile平台木马关键技术的研究与实现[D].中山大学:软件工程.2008.[6]傅曦,陈黎,石卫华等.WindowsCE嵌入式开发入门-基于Xscale架构[M].北京:人民邮电出版社,2006.[7]嵌入式研究网[EB/OL].http://www.cnemb.com[8]胡虚怀,郑若忠.WindowsCE的结构与特征分析[J].电脑技术信息,2000,5(17):4-6.[9]张晓峰.基于WindowsMobile嵌入式系统的图像处理研究及其应用[D].西南交通大学:电气系统控制与信息技术.2010.[10]傅曦,齐宇,徐俊.WindowsMobile手机应用开发[M].人民邮电出版社.2007.[11]WoonchulHam,HyunsokChoi.Developmentof3DStereoscopicCameraInterfaceBasedonEmbeddedsystem[J].WSEASTransactionsonSystems.2007,6(2):27-31.[12]吴琼.采用USB摄像头的嵌入式远程视频监控系统的设计[D].东南大学:医学电子学.2009.[13]黄睿邦,汤荣江,李文亮.Linux下基于Video4Linux的USB摄像头视频采集实现[J].现代计算机(专业版),2009,12(6):182-185.[14]CSDN[EB/OL]:http://www.csdn.net[15]Sybase.IntroductiontoPocketBuilder[J].Elecrronicletters,2004 ,15(2):46-48.[16]董珉.基于WindowsMobile嵌入式系统的人脸识别技术研究及应用[D].厦门:厦门大学,软件工程.2008. 附录应用程序源代码1.程序主界面(MainForm.cs)usingSystem;usingSystem.Linq;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Text;usingSystem.Windows.Forms;usingMicrosoft.WindowsMobile.Forms;usingSystem.IO;namespaceCameraOnWM{publicpartialclassCameraOnWMForm:Form{privateconststring_cameraDefaultPictureExtension=".jpg";publicCameraOnWMForm(){InitializeComponent();}privatevoidCameraOnWMForm_Load(objectsender,EventArgse){PictureDirectoryPath.Text=DirectoryBrowser.PersonalDirectory;textWidth.Text=Coding4FunCamera.Properties.Resources.WidthResolution;textHeight.Text=Coding4FunCamera.Properties.Resources.HeightResolution;textDefaultFileName.Text=Coding4FunCamera.Properties.Resources.DefaultFileName;btnSetResolution.Text=Coding4FunCamera.Properties.Resources.EditButtonText;radioColor.Checked=true;StillQualitySelection.SelectedItem="Default";if(!IsCameraEnabled()){ Application.Exit();}}privatevoidbtnSetPictureDirectory_Click(objectsender,EventArgse){DirectoryBrowserdirectory=newDirectoryBrowser();directory.ShowDialog();if(directory.DialogResult==DialogResult.OK&&directory.SelectedDirectory!=string.Empty){PictureDirectoryPath.Text=directory.SelectedDirectory;}}privatevoidmenuExit_Click(objectsender,EventArgse){Application.Exit();}privatevoidmenuCameraDialog_Click(objectsender,EventArgse){TakeStillPicture();}protectedCameraCaptureStillQualityStillQuality{get{return(CameraCaptureStillQuality)StillQualitySelection.SelectedIndex;}}privatevoidTakeStillPicture(){CameraCaptureDialogcameraCapture=newCameraCaptureDialog();cameraCapture.StillQuality=this.StillQuality;cameraCapture.Owner=this;cameraCapture.DefaultFileName=textDefaultFileName.Text;cameraCapture.InitialDirectory=PictureDirectoryPath.Text; cameraCapture.Resolution=newSize(Convert.ToInt32(textWidth.Text),Convert.ToInt32(textHeight.Text));//Wecreateatempfilenametoseecancreatethefinalpicturewiththefilterappliedif(!cameraCapture.DefaultFileName.ToLower().EndsWith(_cameraDefaultPictureExtension)){cameraCapture.DefaultFileName=cameraCapture.DefaultFileName+"___TEMP"+_cameraDefaultPictureExtension;}else{cameraCapture.DefaultFileName.Replace(_cameraDefaultPictureExtension,"___TEMP"+_cameraDefaultPictureExtension);}try{//Displaysthe"CameraCapture"dialogboxif(DialogResult.OK==cameraCapture.ShowDialog()){stringfileName=cameraCapture.FileName.Replace("___TEMP","");ICameraFilterfilter=GetPictureFilter(cameraCapture.FileName);stringsaveFileName=CameraFileUtilities.incrementFileNameNumber(fileName);filter.Apply().Save(saveFileName,ImageFormat.Jpeg);File.Delete(cameraCapture.FileName);//Themethodcompletedsuccessfully.MessageBox.Show("图片已经保存到: "+saveFileName,this.Text,MessageBoxButtons.OK,MessageBoxIcon.Asterisk,MessageBoxDefaultButton.Button1);}}catch(ArgumentExceptionex){//Aninvalidargumentwasspecified. MessageBox.Show(ex.Message,this.Text,MessageBoxButtons.OK,MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);}catch(OutOfMemoryExceptionex){//Thereisnotenoughmemorytosavetheimageorvideo.MessageBox.Show(ex.Message,this.Text,MessageBoxButtons.OK,MessageBoxIcon.Hand,MessageBoxDefaultButton.Button1);}catch(InvalidOperationExceptionex){//Anunknownerroroccurred.MessageBox.Show(ex.Message,this.Text,MessageBoxButtons.OK,MessageBoxIcon.Hand,MessageBoxDefaultButton.Button1);}catch(System.Exceptionex){//Anunknownerroroccurred.MessageBox.Show(ex.Message,this.Text,MessageBoxButtons.OK,MessageBoxIcon.Hand,MessageBoxDefaultButton.Button1);}}publicICameraFilterGetPictureFilter(stringfileName){if(radioColor.Checked){returnnewColorFilter(fileName);}elseif(radioBW.Checked){returnnewBlackAndWhiteFilter(fileName);}else//radioSepia.Checked{returnnewSepiaFilter(fileName); }}privateboolIsCameraEnabled(){objectcameraEnabled=Microsoft.WindowsMobile.Status.SystemState.GetValue(Microsoft.WindowsMobile.Status.SystemProperty.CameraEnabled);if(null!=cameraEnabled&&0==(int)cameraEnabled){MessageBox.Show("摄像头被禁止使用",this.Text,MessageBoxButtons.OK,MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1);returnfalse;}else{returntrue;}}privatevoidbtnSetResolution_Click(objectsender,EventArgse){if(textWidth.ReadOnly){btnSetResolution.Text=Coding4FunCamera.Properties.Resources.ApplyEditingButtonText;textHeight.ReadOnly=false;textWidth.ReadOnly=false;}else{btnSetResolution.Text=Coding4FunCamera.Properties.Resources.EditButtonText;textHeight.ReadOnly=true;textWidth.ReadOnly=true;}}privatevoidbtnSetName_Click(objectsender,EventArgse){if(textDefaultFileName.ReadOnly) {textDefaultFileName.ReadOnly=false;btnSetName.Text=Coding4FunCamera.Properties.Resources.ApplySetFileName;}else{textDefaultFileName.ReadOnly=true;btnSetName.Text=Coding4FunCamera.Properties.Resources.SetFileName;}}privatevoidCoding4FunCameraForm_KeyDown(objectsender,KeyEventArgse){}privatevoidmenuBrowsePictures_Click(objectsender,EventArgse){try{BrowsePicturesbrowser=newBrowsePictures(PictureDirectoryPath.Text);browser.ShowDialog();}catch(ArgumentExceptionex){MessageBox.Show(ex.Message);}}privatevoidtextWidth_KeyPress(objectsender,KeyPressEventArgse){if(!char.IsNumber(e.KeyChar)&(Keys)e.KeyChar!=Keys.Back&(Keys)e.KeyChar!=Keys.Delete){e.Handled=true;}} privatevoidtextHeight_KeyPress(objectsender,KeyPressEventArgse){if(!char.IsNumber(e.KeyChar)&(Keys)e.KeyChar!=Keys.Back&(Keys)e.KeyChar!=Keys.Delete){e.Handled=true;}}}}1.图片浏览(BrowsePictures.cs)usingSystem;usingSystem.Linq;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO;namespaceCameraOnWM{publicpartialclassBrowsePictures:Form{privatestring_initialDirectory;publicBrowsePictures(stringdirectory){InitializeComponent();InitializeViewer(directory);}privatevoidInitializeViewer(stringdirectory){boolfilesFound=false;dropdownPictures.Items.Clear();InitialDirectory=directory;string[]files=Directory.GetFiles(InitialDirectory);foreach(stringfileinfiles){FileInfofileinfo=newFileInfo(file); if(fileinfo.Extension.ToLower()==".jpg"||fileinfo.Extension.ToLower()==".bmp"||fileinfo.Extension.ToLower()==".jpeg"){dropdownPictures.Items.Add(fileinfo.Name);filesFound=true;}}if(filesFound){stringfile=files[0];Bitmappicture=newBitmap(file);pictureViewer.Image=picture;dropdownPictures.SelectedIndex=0;}}publicstringInitialDirectory{get{return_initialDirectory;}set{stringtestDirectory=value;if(Directory.Exists(testDirectory)){_initialDirectory=value;}else{thrownewApplicationException(CameraOnWM.Properties.Resources.InvalidDirectory);}}}privatevoidmenuBack_Click(objectsender,EventArgse){this.DialogResult=DialogResult.OK;this.Close();} privatevoiddropdownPictures_SelectedIndexChanged(objectsender,EventArgse){stringfileName=InitialDirectory+"\"+(string)dropdownPictures.SelectedItem;if(File.Exists(fileName)){Bitmappicture=newBitmap(fileName);pictureViewer.Image=picture;pictureViewer.Refresh();}}privatevoidmenuDelete_Click(objectsender,EventArgse){stringfileName=InitialDirectory+"\"+(string)dropdownPictures.SelectedItem;if(File.Exists(fileName)){File.Delete(fileName);}InitializeViewer(_initialDirectory);}}}1.目录浏览(DirectoryBrowser.cs)usingSystem;usingSystem.Linq;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO;namespaceCameraOnWM{publicpartialclassDirectoryBrowser:Form{stringsubstringDirectory; privatestaticstring_personaldirectory=Environment.GetFolderPath(Environment.SpecialFolder.Personal);publicDirectoryBrowser(){InitializeComponent();stringpath=Environment.GetFolderPath(Environment.SpecialFolder.Programs);stringrootdirectory=Directory.GetDirectoryRoot(path);TreeNoderootNode=DirectoryTreeView.Nodes.Add(rootdirectory);DirectoryTreeView.ImageList=directoryImages;PopulateTree(rootdirectory,rootNode);rootNode.Expand();}publicstaticstringPersonalDirectory{get{return_personaldirectory;}}publicstringSelectedDirectory{get{returnlblCurrentSelection.Text;}}publicvoidPopulateTree(stringdirectoryValue,TreeNodeparentNode){string[]directoryArray=Directory.GetDirectories(directoryValue);try{if(directoryArray.Length!=0){foreach(stringdirectoryindirectoryArray){substringDirectory=directory.Substring(directory.LastIndexOf('\')+1,directory.Length-directory.LastIndexOf('\')-1); TreeNodemyNode=newTreeNode(substringDirectory);myNode.ImageIndex=0;myNode.SelectedImageIndex=1;parentNode.Nodes.Add(myNode);PopulateTree(directory,myNode);}}}catch(UnauthorizedAccessException){parentNode.Nodes.Add("Accessdenied");}//endcatch}privatevoidExpandPersonalDirectory(DirectoryInfod,refTreeNodet){if(d.FullName.Equals(_personaldirectory)){t.Expand();}}privatevoidDirectoryView_AfterSelect(objectsender,TreeViewEventArgse){lblCurrentSelection.Text=e.Node.FullPath.Replace(@"\",@"");}privatevoidmenuOK_Click(objectsender,EventArgse){this.DialogResult=DialogResult.OK;this.Close();}privatevoidmenuCancel_Click(objectsender,EventArgse){this.DialogResult=DialogResult.Cancel;this.Close();} }}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭