Добрый день, форумчане.
Требуется написать программу, которая могла бы делать снимок с web камеры.
На данный момент нагуглил такое решение:
Данный код делает снимок и сохраняет его в папку пользователя "Изображения". Все бы ничего, но данный код отрабатывает лишь один раз.
При попытке запустить его повторно, система предлагает выбрать "видео устройство", которое у меня одно:
И вместо изображения появляется пустой файл (размером 0 байт)
Буду благодарен, если укажете в чем здесь ошибка
Требуется написать программу, которая могла бы делать снимок с web камеры.
На данный момент нагуглил такое решение:
C#:
using System;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace Snaps_cam
{
class Program
{
private const int WM_CAP_DRIVER_CONNECT = 0x40a;
private const int WM_CAP_DRIVER_DISCONNECT = 0x40b;
private const int WS_CHILD = 0x40000000;
private const int WS_POPUP = unchecked((int)0x80000000);
private const int WM_CAP_SAVEDIB = 0x419;
[DllImport("avicap32.dll", EntryPoint = "capCreateCaptureWindowA")]
public static extern IntPtr capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);
[DllImport("user32", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
static void Snaps_cam()
{
String dName = "".PadRight(100);
String dVersion = "".PadRight(100);
IntPtr hWndC = capCreateCaptureWindowA("VFW Capture", WS_POPUP | WS_CHILD, 0, 0, 320, 240, 0, 0); // узнать дескриптор камеры
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0); //подключиться к камере
string path = Environment.GetEnvironmentVariable("USERPROFILE") + "\\Pictures\\" + DateTime.Now.ToString("yyyy.MM.dd HH.mm.ss") + ".jpg";
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32()); // сохранить скриншот
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0); //отключить камеру
}
public static void Main()
{
Snaps_cam();
}
}
}
При попытке запустить его повторно, система предлагает выбрать "видео устройство", которое у меня одно:
И вместо изображения появляется пустой файл (размером 0 байт)
Буду благодарен, если укажете в чем здесь ошибка