C#如何打开摄像头

大虾们:请问下怎么用C#打开电脑本身的摄像头,有没有相关方面的教学资料,先谢谢各位先~~~~~~~... 大虾们: 请问下怎么用C#打开电脑本身的摄像头,有没有相关方面的教学资料,先谢谢各位先~~~~~~~ 展开
 我来答
旁琛利GB
2013-04-01 · TA获得超过406个赞
知道答主
回答量:52
采纳率:0%
帮助的人:35.9万
展开全部
请先安装Microsoft DirectX SDK

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace 调用摄像头
{
public partial class Form1 : Form
{

cVideo video;
public Form1()
{
InitializeComponent();
}
public class VideoAPI //视频API类
{

// 视频API调用

[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("avicap32.dll")]

public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);

[DllImport("User32.dll")]

public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);

// 常量

public const int WM_USER = 0x400;

public const int WS_CHILD = 0x40000000;

public const int WS_VISIBLE = 0x10000000;

public const int SWP_NOMOVE = 0x2;

public const int SWP_NOZORDER = 0x4;

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_CALLBACK_FRAME = WM_USER + 5;

public const int WM_CAP_SET_PREVIEW = WM_USER + 50;

public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;

public const int WM_CAP_SET_VIDEOFORMAT = WM_USER + 45;

public const int WM_CAP_START = WM_USER;

public const int WM_CAP_SAVEDIB = WM_CAP_START + 25;

}

public class cVideo //视频类
{

private IntPtr lwndC; //保存无符号句柄

private IntPtr mControlPtr; //保存管理指示器

private int mWidth;

private int mHeight;

public cVideo(IntPtr handle, int width, int height)
{

mControlPtr = handle; //显示视频控件的句柄

mWidth = width; //视频宽度

mHeight = height; //视频高度

}

/// <summary>

/// 打开视频设备

/// </summary>

public void StartWebCam()
{

byte[] lpszName = new byte[100];

byte[] lpszVer = new byte[100];

VideoAPI.capGetDriverDescriptionA(0, lpszName, 100, lpszVer, 100);

this.lwndC = VideoAPI.capCreateCaptureWindowA(lpszName, VideoAPI.WS_CHILD | VideoAPI.WS_VISIBLE, 0, 0, mWidth, mHeight, mControlPtr, 0);

if (VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_CONNECT, 0, 0))
{

VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SET_PREVIEWRATE, 100, 0);

VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SET_PREVIEW, true, 0);

}

}

/// <summary>

/// 关闭视频设备

/// </summary>

public void CloseWebcam()
{

VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_DRIVER_DISCONNECT, 0, 0);

}

/// <summary>

/// 拍照

/// </summary>

/// <param name="path">要保存bmp文件的路径</param>

public void GrabImage(IntPtr hWndC, string path)
{

IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);

VideoAPI.SendMessage(lwndC, VideoAPI.WM_CAP_SAVEDIB, 0, hBmp.ToInt32());

}

}

private void button1_Click(object sender, EventArgs e)
{

video = new cVideo(pictureBox1.Handle, pictureBox1.Width, pictureBox1.Height);

video.StartWebCam();

}

private void button2_Click(object sender, EventArgs e)
{
video.CloseWebcam();

}

private void button3_Click(object sender, EventArgs e)
{
video.GrabImage(pictureBox1.Handle, "d:\\a.bmp");

}

}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华瑞通
2024-12-02 广告
高清远程监控摄像头,作为深圳华瑞通科技有限公司的核心产品之一,融合了尖端科技与精湛工艺。采用高清晰度图像传感器,即使在复杂光线环境下,也能呈现细腻、真实的监控画面。支持远程访问与控制,无论身处何地,都能实时掌握监控现场动态。智能化的功能设计... 点击进入详情页
本回答由华瑞通提供
匿名用户
2013-04-02
展开全部
public partial class Form1 : Form
{
const short WM_CAP = 1024;
const int WM_CAP_DRIVER_CONNECT = WM_CAP + 10;
const int WM_CAP_DRIVER_DISCONNECT = WM_CAP + 11;
const int WM_CAP_EDIT_COPY = WM_CAP + 30;
const int WM_CAP_SET_PREVIEW = WM_CAP + 50;
const int WM_CAP_SET_PREVIEWRATE = WM_CAP + 52;
const int WM_CAP_SET_SCALE = WM_CAP + 53;
const int WS_CHILD = 1073741824;
const int WS_VISIBLE = 268435456;
const short SWP_NOMOVE = 2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 4;
const short HWND_BOTTOM = 1;
int iDevice = 0;
int hHwnd;
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SendMessageA")]
static extern int SendMessage(int hwnd, int wMsg, int wParam, [MarshalAs(UnmanagedType.AsAny)]
object lParam);
[System.Runtime.InteropServices.DllImport("user32", EntryPoint = "SetWindowPos")]
static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
[System.Runtime.InteropServices.DllImport("user32")]
static extern bool DestroyWindow(int hndw);
[System.Runtime.InteropServices.DllImport("avicap32.dll")]
static extern int capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int x, int y, int nWidth, short nHeight, int hWndParent, int nID);
[System.Runtime.InteropServices.DllImport("avicap32.dll")]
static extern bool capGetDriverDescriptionA(short wDriver, string lpszName, int cbName, string lpszVer, int cbVer);
private void OpenPreviewWindow()
{
int iHeight = 320;
int iWidth = 200;
//
// Open Preview window in picturebox
//
hHwnd = capCreateCaptureWindowA(iDevice.ToString(), (WS_VISIBLE | WS_CHILD), 0, 0, 640, 480, picCapture.Handle.ToInt32(), 0);
//
// Connect to device
//
if (SendMessage(hHwnd, WM_CAP_DRIVER_CONNECT, iDevice, 0) == 1)
{
//
// Set the preview scale
//
SendMessage(hHwnd, WM_CAP_SET_SCALE, 1, 0);
//
// Set the preview rate in milliseconds
//
SendMessage(hHwnd, WM_CAP_SET_PREVIEWRATE, 66, 0);
//
// Start previewing the image from the camera
//
SendMessage(hHwnd, WM_CAP_SET_PREVIEW, 1, 0);
//
// Resize window to fit in picturebox
//
SetWindowPos(hHwnd, HWND_BOTTOM, 0, 0, iWidth, iHeight, (SWP_NOMOVE | SWP_NOZORDER));
}
else
{
//
// Error connecting to device close window
//
DestroyWindow(hHwnd);
}
}
private void ClosePreviewWindow()
{
//
// Disconnect from device
//
SendMessage(hHwnd, WM_CAP_DRIVER_DISCONNECT, iDevice, 0);
//
// close window
//
DestroyWindow(hHwnd);
}

private void button1_Click(object sender, EventArgs e)
{
iDevice = int.Parse(device_number_textBox.Text);
OpenPreviewWindow();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天邪白玉
2013-04-01
知道答主
回答量:55
采纳率:0%
帮助的人:10.6万
展开全部
这个不清楚..还是百度google吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式