C# 使用“CameraCaptureDialog”捕获并保存多个图像`
我有一个Windows Mobile(Compact framework 2)应用程序,它定义了一个用户控件MPhotoControl。MPhotoControl显示默认图像,当用户单击此图像时,将打开C# 使用“CameraCaptureDialog”捕获并保存多个图像`,c#,windows-mobile,windows-mobile-5.0,compact-framework2.0,C#,Windows Mobile,Windows Mobile 5.0,Compact Framework2.0,我有一个Windows Mobile(Compact framework 2)应用程序,它定义了一个用户控件MPhotoControl。MPhotoControl显示默认图像,当用户单击此图像时,将打开CameraCaptureDialog以允许拍摄照片。捕获后,照片将显示在用户控件中。这适用于捕获一张照片,然后返回应用程序 问题是,当一个特定表单上有很多这样的控件时,用户界面就会变得非常不友好,因为用户必须为表单上的每个照片控件显示照相机对话框、拍照、保存和关闭对话框。用户要求的是一种机制,可
CameraCaptureDialog
以允许拍摄照片。捕获后,照片将显示在用户控件中。这适用于捕获一张照片,然后返回应用程序
问题是,当一个特定表单上有很多这样的控件时,用户界面就会变得非常不友好,因为用户必须为表单上的每个照片控件显示照相机对话框、拍照、保存和关闭对话框。用户要求的是一种机制,可以打开CameraCaptureDialog
,在对话框关闭的情况下拍摄多张照片,直到所有照片控件都有图像为止
我正在尝试实现这一点,但我看不到一种方法可以让CameraCaptureDialog
一次捕获并保存多张照片。据我所知,这是不可能的,因为当我的HTC Touch Diamond上显示对话框时,我只能选择“接受照片”(箭头图标)、“再次捕获”(相机图标)或“取消并关闭对话框”(垃圾箱图标)。当我点击箭头接受它时,它总是关闭对话框
那么,是否有人知道使用CameraCaptureDialog
一次捕获和保存多个图像的方法
然后,我想尝试多次打开CameraCaptureDialog
作为一种解决方法。因此,一旦保存了第一个图像,就会立即再次打开对话框以捕获第二个图像。下面是我的代码,显示了我在解决方法方面的尝试:
public partial class MPhotoControl : UserControl
{
public static IEnumerable<MPhotoControl> PhotoControls;
...
private void CaptureMultiplePhotos()
{
foreach (MPhotoControl photo in PhotoControls)
{
using (CameraCaptureDialog cameraDialog = new CameraCaptureDialog())
{
if (cameraDialog.ShowDialog() != DialogResult.OK)
{
break;
}
photo.CapturePhoto(cameraDialog.FileName);
}
}
}
}
公共部分类MPhotoControl:UserControl
{
公共静电可数光控制器;
...
私人无效捕获多张照片()
{
foreach(光控中的MPhotoControl照片)
{
使用(CameraCaptureDialog cameraDialog=new CameraCaptureDialog())
{
if(cameraDialog.ShowDialog()!=DialogResult.OK)
{
打破
}
photo.CapturePhoto(cameraDialog.FileName);
}
}
}
}
问题是,CameraCaptureDialog
仍然只打开一次,对ShowDialog
方法的后续调用只返回DialogResult.Cancel
。那么,是否有人知道此解决方案不起作用的原因,以及是否有可能在保存上一张捕获的图像后立即重新打开对话框?请查看此处:
我无法在这里附加任何代码或二进制文件,所以我写了一篇新的博文
该代码启动相机应用程序,等待其关闭,并向您显示新照片列表
代码还不是完美的,但它是一个起点。自从我使用CameraCaptureDialog甚至WM开发以来,已经有很长时间了。如果你交换using和foreach会怎么样?嗨,乔希。我最初有一个CameraCaptureDialog,定义为静态成员,而不是在循环中创建一个新成员,但这也返回了DialogResult。在第二次调用ShowDialog方法时取消。这会触发一些旧内存。。。是否有初始化方法?假设CameraCaptureDialog只允许一个实例,这就是为什么不能有多个实例。大多数Windows Mobile应用程序也是如此。-要解决问题,您不能使用CameraCaptureDialog类。您可以为相机应用程序创建一个新进程,并等待相机应用程序关闭(最小化)。在开始照相机进程之前,先对图像目录进行快照,以便以后知道添加了哪些图像。要将照相机作为新进程运行,请使用“pimg.exe-camerakey”谢谢,Josef。我昨天刚刚和我的一位同事谈论了一个类似于这些思路的解决方案。这肯定是一个很好的起点。。。我来看看。谢谢。很高兴能帮上忙。亲切的问候~约瑟夫