gpt4 book ai didi

c# - 使用 WIA 在 C# 中使用网络摄像头自动拍照

转载 作者:行者123 更新时间:2023-11-30 12:17:03 26 4
gpt4 key购买 nike

我正在使用 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 将图片保存到文件,并将新文件的名称作为输出参数返回。

根据您的评论

编辑 - 您使用的是“Windows 7 版本”的 WiaLib 吗?如果是这样,请尝试这样的事情:

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。无论如何,它适用于我的网络摄像头。

关于c# - 使用 WIA 在 C# 中使用网络摄像头自动拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com