2010-11-29 12 views
4

私はWIALibを使用して自分のウェブカメラにアクセスしています。私が開発しているコードはとてもシンプルです。ボタンを押すとウェブカム画像が撮影され、画像ボックスに表示されます。WIAを使用してC#のWebカメラを使用して自動的に写真を撮る

私はすでに自分のウェブカメラで写真を撮ることができますが、まだ完全には自動化されていません。

wiaPics = wiaRoot.GetItemsFromUI(WiaFlag.SingleImage, WiaIntent.ImageTypeColor) as CollectionClass; 

をしかし、これは画像を選択するようにユーザーに尋ねる:私はウェブカメラで撮影した画像を取得するために見つけた唯一の方法は、これを使用しています。そして、私はいつも最後の写真を撮りたい。だから私はこのようにしようとしている:

string imageFileName = Path.GetTempFileName(); // create temporary file for image 

wiaItem = wiaRoot.TakePicture(); // take a picture 

Cursor.Current = Cursors.WaitCursor; // could take some time 

this.Refresh(); 

wiaItem.Transfer(imageFileName, false); // transfer picture to our temporary file 

pictureBox1.Image = Image.FromFile(imageFileName); // create Image instance from file 

Marshal.ReleaseComObject(wiaItem); 

しかし、この方法TakePicture()はnullを返します、と私は、画像を転送することはできません。一番奇妙なのは、TakePicture()メソッドが呼び出された後に実際に写真が撮られたということです。なぜなら私が手動でウェブカメラに行くと写真がそこにあるからです!私はそれがなぜ価値を返さないのか分かりません。

要約すると、私はこの2つのうちのいずれかを必要とします。 1. TakePicture()を働かせて、私が使用できる値を返します。 2.ウェブカメラの写真のリストに自動的にアクセスして、最後に撮影した写真を取得できます。

ご協力ありがとうございます、Micael。

答えて

3

私が見るところでは、wiaItem = wiaRoot.TakePicture()が間違った経路を辿っています。これを試してみてください:

string imageFileName; 
wiaRoot.TakePicture(out takenFileName); 
pictureBox1.Image = Image.FromFile(imageFileName); 

TakePictureは、ファイルに絵を保存し、出力パラメータとして新しいファイルの名前を返します。

あなたのコメントごとにを編集してください - あなたはWiaLibの "windows 7 version"を使用していますか?むしろTakePictureよりもあなたがthe well known guid(また、COM相互運用機能ラッパーから露出)でExecuteCommandを使用

var manager = new DeviceManagerClass(); 
Item wiaItem; 
Device device = null; 
foreach (var info in manager.DeviceInfos) 
{ 
    if (info.DeviceID == DESIRED_DEVICE_ID) 
    { 
     device = info.Connect(); 
     wiaItem = device.ExecuteCommand(CommandID.wiaCommandTakePicture); 
    } 
} 

:もしそうなら、このような何かを試してみてください。いずれにしても、私のウェブカメラでうまくいきました。

+0

フィリップのおかげでありがとうございました。問題は、私は "メソッドのためのオーバーロードはありません" TakePicture "1引数を取る"エラーを取得しています。 : – Micael

+0

@Micael - 最新の方は編集がうまくいくかどうか確認してください –

+0

私のWiaLibのバージョンはわかりませんWindowsXP ProとVisual Studio 2010で作業しています。あなたのコード、クラスDeviceManagerClassとデバイスが認識されませんでした.WiaLib以外の参照を追加する必要がありますか?ありがとうございました:) – Micael

関連する問題