2012-05-01 8 views
1

C#でWebcam用のライブラリをたくさん見ました。C#でウェブカメラを正しく処理する

  1. 彼らはあまりにも、クリップボードを使用するユーザの能力を排除し、クリップボードを使用します。しかし、2つの一般的な問題があります。
  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); 
    } 
} 
+0

このコードは機能しますか?それは私のためにCaptureFrameメソッドでnull値をimageとして返します!提案はありますか? –

答えて

2

VfW capture APIは非常に限られているが、enumerate devicesconnect to specific ones、およびcapture the data into a memory bufferにあなたを許可しない:

これは、これまでのところ、私のクラスがあります。

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

私は手でコードを作成する必要はありませんが、フィルタグラフを作成し、webcamデバイスを追加して、ピンのレンダリングを指示します。

関連する問題