首页 > 解决方案 > C#:微软Surface-win10平板调用摄像头出错

问题描述

[DllImport("avicap32.dll")]
public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer);

[DllImport("avicap32.dll")]
public static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);

[DllImport("User32.dll")]
public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);

[DllImport("User32.dll")]
public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);

public const int WM_USER = 0x400; 
public const int WS_CHILD = 0x40000000; 
public const int WS_VISIBLE = 0x10000000; 
public const int WM_CAP_DRIVER_CONNECT = WM_USER + 10; 
public const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11; 
public const int WM_CAP_SET_PREVIEW = WM_USER + 50; 
public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52; 

byte[] lpszName = new byte[100];
byte[] lpszVer = new byte[100];
capGetDriverDescriptionA(0, lpszName, 100, lpszVer, 100);
IntPtr lwndC = capCreateCaptureWindowA(lpszName, WS_VISIBLE + WS_CHILD, 0, 0, mWidth, mHeight, mControlPtr, 0);

//当程序运行到下面的代码时,会出现一个摄像头选择对话框(Microsoft Camera Front/Microsoft Camera Rear)。选择其中任何一个后,if语句中的代码不执行,相机无法正常运行。谁能帮我?为什么会这样,谢谢。

if (SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_CONNECT, 0, 0))
{
    SendMessage(lwndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
    SendMessage(lwndC, WM_CAP_SET_PREVIEW, true, 0);
}

标签: camera

解决方案


推荐阅读