2012-02-09 3 views
1

カメラは画像をキャプチャしてフォルダ(.bmpファイル)に保存します。同時に、アプリケーションはフォルダから画像ファイルを1つずつ取得して処理する必要があります私たちがFileSystemWatcherを使用すると、問題が発生する可能性があります(イメージの処理前にディレクトリを選択しているため、更新されたイメージは処理されません)。実行時にフォルダ?ビットマップファイルをフォルダから動的に処理するC#

答えて

1

については

あなたはFileSystemWatcherを使用することができますが、いくつかの癖を認識する必要があります。ウォッチャーは、ファイルが最初に作成され、変更されたイベントがファイルに書き込まれるときに作成済みイベントを発生させます。カメラがファイルへの書き込みを停止したときを知ることができないため、Closeイベントはありません。 限り、ファイルが書き込み用に開かれているとして、あなたは処理し、それを読むためにあらゆる試みのためにそれを読むことができません例外

を発生させますあなたがこれを扱うことができるいくつかの方法があります。

    は、
  • すべてのイベントをリストに記録し、リスト内のすべてのファイルを定期的に処理することができます。ファイルを開くことに失敗した場合は、ファイルをリストに残して、次の処理ラウンドで処理してください。
  • ファイルを読み込もうとするまでに、カメラが書き込みを終了することを期待して、ファイルの読み込みを遅延させることができます。引き続き例外が発生した場合は、しばらく待ってから再試行してください。
  • 作成されたイベントや変更されたイベントを追跡することができます。特定のタイムアウト後にファイルに対してイベントが受信されない場合にのみファイルをオープンしようとします。

ポーリングとタイムアウトは、タイマーを使用して実装できます。

ポーリングで導入された遅延が気に入らない場合は、別のスレッドを使用してイベントのリストを待機し、新しいイベントが表示されたときに処理できます。あなたはC#4のBlockingCollectionの機能を比較的単純な方法で使うことができます。

4

一つの解決策は、新しいファイルがフォルダに置かれたときに通知を受け取るためにFileSystemWatcherを使用することです。その後、プロセスファイル(複数可)。

Fiを提供して取得するにはあなたが使用できるフォルダ内のすべてのBMPファイルのファイル名:

string[] fileNames = Directory.GetFiles("<path>", "*.bmp"); 

次に、ビットマップを通常どおりロードできます。

+0

キャプチャした画像は、FileSystemWatcherを使用すると動的にフォルダが更新されますので、問題が発生する可能性があります(画像を処理する前にディレクトリを選択していますので、更新された画像は処理されません) –

+0

'FileSystemWatcher'は、ファイルの作成だけでなく、ファイルの更新も扱うことができます。また、ディレクトリの内容をリストし、各ファイルの最後の書き込み時間を保存することもできます。新しいファイルまたは新しい変更タイムスタンプ。 –

0

任意の画像の開発はC#で画像をロードする方法を知っておく必要があります。

FROMFILE

画像ファイルを読み込み、ビットマップまたはイメージのいずれかにロードするには、2つの直接的な方法があります。 C#のコードを見よ:

Image myImg = Image.FromFile("path here"); 
Bitmap myBmp = Bitmap.FromFile("path here"); 

はまたBitmapオブジェクトもをロードすることができます。

Bitmap myBmp = new Bitmap("path here"); 

それはFROMFILEに固執するのがベストですので、上記のコードは、しかしImageオブジェクトでは動作しません。

ダイアログボックス

最後に、ファイルからイメージをロードするアプリケーションを作成するために、あなたのC#のプログラムは、ファイルを選択するためのダイアログボックスを必要とします。 .Net OpenFileDialogの使用は簡単です。ただ、ユーザーが選択したファイル名に画像ローディングコードを適用するので、例えば:

もちろん
Bitmap loadedBitmap = Bitmap.FromFile(openFileDialog1.Filename); 

、あなたは必ずしもこのようにファイルから画像をロードする必要はありませんが、それはあります有用なことを知っている。詳しくはHERE

関連する問題