请帮助我解决所附的代码。 在Panasonic Tablet MK5型号上运行此项目。单击启动相机。预览将在其停滞后的前两次工作。 我在这里使用DShowLib_86.dll,因为我的应用程序在32位OS上运行。 首先,似乎是Microsoft提供的Direct Show库存在问题。
由于我使用CallingConvention.Cdecl或.SrdCall解决的调用约定,出现堆栈不平衡错误
静止预览在第三次不起作用。
private static extern IntPtr pCamInfo_GetConnectedCameraInfo_DotNET(ref int error, ref int numCameras);
[DllImport("DShowLib.dll", CallingConvention = CallingConvention.Cdecl)]
嗨,先生, 下面的一段代码引起了问题。 在这里,如果我选择ActiveCamera.CameraFormat [1],那么它可以根据需要工作很多次。但是预览不是很清楚,因为此格式没有正确的分辨率格式。 但是,如果我选择ActiveCamera.CameraFormat [0],则在两次预览后它不起作用。 这里要注意的一点是,我们正在使用Microsoft提供的DShowLib.dll来实现相机功能。由于我们的C#Windows应用程序中的WPF在32位操作系统上运行,因此我们正在访问DShowLib_86.dll。
private void InitCamera()
{
bool flag = false;
if (ActiveCamera != (Camera)null)
{
ActiveCamera.EndPreview();
ActiveCamera.StartPreview(ActiveCamera.CameraFormats[0], this.ImageBox.Handle);
}
else
{
try
{
Camera[] cameras = Camera.Cameras;
if (cameras != null)
{
ActiveCamera = cameras[0];
flag = true;
}
}
catch (Exception ex)
{
Log.Error("No camera: ", ex, new object[0]);
}
if (flag)
{
ActiveCamera.StartPreview(ActiveCamera.CameraFormats[0], this.ImageBox.Handle);
this.SaveButton.Enabled = true;
this.CancelButton.Enabled = true;
}
else
{
ActiveCamera = (Camera)null;
this.SaveButton.Enabled = false;
this.CancelButton.Enabled = false;
}
}
}