相机将捕获图像并存储在一个文件夹(.bmp文件)中。同时我们的应用程序需要从文件夹中逐个获取图像文件进行处理。(捕获的图像将动态更新文件夹。如果我们使用FileSystemWatcher,它可能会给我们带来问题。(我们在处理图像之前选择目录,因此更新后的图像不会处理。这个问题是否有任何解决方案)如何在运行时从文件夹中逐个获取图像?
答案 0 :(得分:4)
一种解决方案是使用FileSystemWatcher
在将新文件放入文件夹时收到通知。然后,处理文件。
要获取您可以使用的文件夹中所有BMP文件的文件名:
string[] fileNames = Directory.GetFiles("<path>", "*.bmp");
然后你可以正常加载位图。
答案 1 :(得分:1)
使用FileSystemWatcher http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
答案 2 :(得分:1)
您可以使用FileSystemWatcher,但需要注意一些怪癖。监视器将在首次创建文件时引发 Created 事件,并将一个或多个 Modified 事件作为数据写入文件。没有关闭事件,因此您无法知道相机何时停止写入文件。 只要文件打开以进行写入,您将无法读取它以进行处理,任何尝试读取它都会引发异常
有几种方法可以解决这个问题:
可以使用计时器实现轮询和超时。
如果您不喜欢轮询引入的延迟,您可以使用单独的线程在事件列表上等待并处理出现的新事件。您可以使用C#4中BlockingCollection的功能以相对简单的方式执行此操作。
答案 3 :(得分:0)
任何图像开发都需要知道如何在C#中加载图像。
<强> FROMFILE 强>
有两种直接方法可以读取图像文件并将其加载到位图或图像中。看看C#代码:
Image myImg = Image.FromFile("path here");
Bitmap myBmp = Bitmap.FromFile("path here");
或者,也可以使用以下内容加载Bitmap对象:
Bitmap myBmp = new Bitmap("path here");
上面的代码不适用于Image对象,因此最好坚持使用FromFile。
对话框
最后,要编写一个从文件加载图像的应用程序,C#程序需要一个对话框来选择文件。使用.Net OpenFileDialog非常简单。只需将图像加载代码应用于用户选择的文件名,例如:
Bitmap loadedBitmap = Bitmap.FromFile(openFileDialog1.Filename);
当然,您不必以这种方式从文件加载图像,但知道它是有用的。
了解更多信息HERE