使用DShowLib.dll访问Panasonic MK5后置摄像头,但一段时间后无法使用

时间:2019-12-12 13:56:06

标签: c# c++ dll

请帮助我解决所附的代码。 在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;
            }
        }
    }

0 个答案:

没有答案