首页 / C# / 使用WIA在C#中使用网络摄像头自动拍照
使用WIA在C#中使用网络摄像头自动拍照
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用WIA在C#中使用网络摄像头自动拍照,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1859字,纯文字阅读大概需要3分钟。
内容图文
我正在使用WIALib访问我的网络摄像头.我正在开发的代码非常简单:当按下按钮时,会拍摄网络摄像头图像,然后显示在图片框中.
我已经可以用我的网络摄像头拍照了,但它还没有完全自动化.我发现检索网络摄像头拍摄的照片的唯一方法是使用:
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()之后,图片才真正被拍摄,因为如果我手动进入网络摄像头,图片就在那里!我只是不明白为什么它不返回值.
总而言之,我要么需要这两个中的一个:
1.让TakePicture()工作,返回我可以使用的值.
2.自动访问网络摄像头的图片列表,以便我可以检索最后拍摄的图片.
最诚挚的问候和感谢帮助,Micael.
解决方法:
从我所看到的,wiaItem = wiaRoot.TakePicture()走错了路.试试这个:
string imageFileName;
wiaRoot.TakePicture( out takenFileName);
pictureBox1.Image = Image.FromFile(imageFileName);
TakePicture将图片保存到文件中,并将新文件的名称作为输出参数返回.
根据您的评论进行编辑 – 您使用的是WiaLib的“Windows 7版本”吗?如果是这样,尝试这样的事情:
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);
}
}
你在哪里使用ExecuteCommand和the well known guid(也是从COM互操作包装器中公开)而不是TakePicture.无论如何,它适用于我的网络摄像头.
内容总结
以上是互联网集市为您收集整理的使用WIA在C#中使用网络摄像头自动拍照全部内容,希望文章能够帮你解决使用WIA在C#中使用网络摄像头自动拍照所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。