1

C#でWebカメラを使用するためのライブラリをたくさん見てきました。しかし、2つの一般的な問題があります。

  1. 彼らはクリップボードを使用しているため、ユーザーはクリップボードを使用できません。
  2. ウェブカメラが点滅するため、ユーザーを苛立たせる可能性のある「テスト写真の撮影」を除いて、ウェブカメラが接続されているかどうかを検出する方法はありません。

これら2つの問題のいずれかを解決する方法はありますか?

これはこれまでの私のクラスです:

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WebcamLibrary
{
    public static class Webcam
    {
        private static IntPtr Handle;

        public static void Start()
        {
            try
            {
                Stop();
                Handle = capCreateCaptureWindowA("WebCap", 0, 0, 0, 320, 240, 0, 0);
                SendMessage(Handle, 1034, 0, 0);
                SendMessage(Handle, 1074, 0, 0);
            }
            catch { }
        }
        public static void Stop()
        {
            try
            {
                SendMessage(Handle, 1035, 0, 0);
                Clipboard.Clear();
            }
            catch { }
        }
        public static Image CaptureFrame()
        {
            try
            {
                SendMessage(Handle, 1084, 0, 0);
                SendMessage(Handle, 1054, 0, 0);
                Image image = (Image)Clipboard.GetDataObject().GetData(DataFormats.Bitmap);
                Clipboard.Clear();
                return image;
            }
            catch
            {
                return null;
            }
        }

        [DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
        [DllImport("avicap32.dll")]
        private static extern IntPtr capCreateCaptureWindowA(string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID);
    }
}
4

1 に答える 1

3

VfWキャプチャAPIは非常に制限されていますが、デバイスを列挙し、特定のデバイス接続し、データをメモリバッファにキャプチャすることができます。

ただし、これは非常に古く、C#からも使用できるWDMとDirectShowによって約10年前に廃止されました。

渡すコードはありませんが、フィルターグラフを作成し、Webカメラデバイスを追加して、ピンをレンダリングするように指示します。

于 2012-05-01T12:57:56.403 に答える