在业务解决方案中使用移动设备摄像头






4.92/5 (10投票s)
本文介绍了如何在针对 .NET Compact Framework 的业务应用程序中使用移动设备内置的摄像头和麦克风。
引言
如今,所有 Windows Mobile 设备都配备了内置摄像头。随着其分辨率的不断提高以及所拍摄照片的整体质量的提升,其用途已不再局限于拍摄家庭照片。任何需要进行照片文档记录的行业或机构(例如保险代理人、广告牌维护人员、犯罪现场调查员、摄影记者等)都可以发现此类 Windows Mobile 设备很有用。
在本文中,我将演示如何使用 Microsoft Visual Studio(2005 或 2008 均可)创建一个智能设备应用程序,该应用程序使用摄像头和内置麦克风。该应用程序将提供以下功能:
- 启动内置摄像头并拍照。
- 显示拍摄的照片,并允许用户对其进行调整(通过旋转、裁剪、调整亮度、对比度、伽马校正值)。
- 为照片录制语音备忘录。
- 将照片与语音备忘录一起保存到移动 SQL CE 数据库中。
- 查看数据库中存储的照片并回放录制的备忘录。
这是应用程序主屏幕的外观。

必备组件
您将需要:
- Microsoft Windows Mobile 5.0 SDK(或更高版本),您可以 在此处 下载。
- 一台带有内置摄像头的 Windows Mobile 5.0 设备,用于测试该应用程序。
- Resco MobileForms Toolkit Volume 2,您可以 在此处 下载。
Resco MobileForms Toolkit 是一套专为移动设备设计的 Visual Studio 控件。在将 Resco MobileForms Toolkit Volume 2 安装到您的计算机后,这些控件将自动添加到 Visual Studio 的工具箱中。我们将在项目中 se 使用这些 Resco 控件和库。
- Resco Audio 库 for .NET CF
- Resco ImageBox for .NET CF
- Resco ImageButton for .NET CF
该应用程序可以为 .NET Compact Framework 2.0 和 .NET Compact Framework 3.5 创建。只需下载相应版本的 Resco MobileForms Toolkit 2008 即可。
准备项目
首先,在 Visual Studio 中创建一个新的智能设备项目。为了使 Resco Audio 库和 Resco ImageBox 控件正常工作,必须将包含本机代码的两个 *.dll 文件复制到移动设备上。将这两个文件作为内容添加到您的项目中。
- Resco.Audio.Native.dll
- Resco.ImageBox.Native.dll
您还必须将其 CopyToOutputDirectory
属性设置为 CopyAlways
或 CopyIfNewer
。另外,请将一个名为 data.sdf 的数据库文件添加到项目中。
数据库
该应用程序将使用移动 SQL CE 服务器,这是 .NET Compact Framework 的一部分。Visual Studio 应该能够在部署应用程序时自动将 .NET Compact Framework 和 SQL CE 服务器安装到您的移动设备上。数据库模型非常简单。该数据库仅包含一个表,其架构如图 1 所示。

图 1:数据库模型
Thumb 列将包含图像的缩略图,该缩略图将通过减小尺寸从原始图像创建。这将用于让用户预览图像。
用户界面
该应用程序由三个 Form 对象组成。
MainForm
允许用户使用摄像头拍照并进行调整。RecordForm
允许用户录制语音备忘录。ViewImages
允许用户查看数据库中的图像并回放录制的备忘录。
MainForm
Visual Studio 设计器中的 MainForm
显示在图 2 中。它包含 ImageBox
控件,用于显示拍摄的照片。右上角的 ImageButton
用于旋转图像和启动内置摄像头。在窗体的下部,有 4 个滑块条,可用于放大和缩小、调整亮度、对比度和伽马校正值。Crop
模式复选框将 ImageBox
控件设置为 Crop
模式,如图 3 所示。
![]() |
![]() |
图 2:MainForm 设计器 |
图 3:Crop 模式 |
用户可以调整裁剪矩形的大小和位置,然后执行裁剪。窗体上有两个菜单项。
Save
将图片(包括执行的调整)与语音备忘录一起保存到数据库中。View
查看数据库中的图像。
RecordForm
您可以在图 4 中看到此窗体的设计。该窗体非常简单。它包含一个 ImageButton
,用于开始和暂停录制。录制时长(以毫秒为单位)显示在 TextBox
中。TextBox
的值每 500 毫秒使用一个 Windows Timer 对象刷新。一旦用户完成录制,他可以通过单击 OK 按钮关闭窗体。

图 4:RecordForm
设计
ViewImagesForm
此窗体的大部分内容是在运行时创建的。设计器仅包含一个填充整个客户区域的 Panel
容器。一旦用户选择查看图像,将首先计算数据库中的图像数量。然后创建相应数量的 ImageButton
并将其添加到 Panel
中,每个按钮显示一个图像缩略图(参见图 5)。用户可以单击其中任何一个 ImageButton
。然后,图像将使用 ImageBox
显示在 ViewImages
窗体的整个客户区域(参见图 6)。
![]() |
![]() |
图 5:ViewImages 窗体 |
图 6:ViewImages 窗体 - 显示图像 |
应用程序逻辑
应用程序的逻辑如图 7 所示。状态图显示了各个窗体如何以及何时显示。您可以看到录制语音备忘录是可选的。如果用户选择不录制语音备忘录,则会将 DBNull.Value
存储到 Image 表的 Audio 列中。

图 7:状态图
结论
随身携带一个智能相机,它不仅可以拍照,还可以让用户对其进行处理并将其保存到数据库中,这在许多商业领域都非常有用。然后,移动数据库可以与公司的主要数据库服务器同步,确保数据的可访问性和安全性。您可以 在此处 下载整个应用程序,包括 C# 源代码。