私は、フォルダー内の画像を見つけて、どのように切り取るべきかをユーザーに提示する目的のアプリを書いています。私は日常的に言語から言語にいたるまでジャンプしているので、ベストプラクティスとコンセプトを混乱させる傾向があります。このようなケースです。イメージを一度ロードして、マルチスレッドのC#アプリケーションでそれを渡す方法はありますか?
プログラムの流れは次のようになります。メインフォームが表示され、ブラウズボタン(フォルダをドロップすることもできます)が表示されます。フォルダを選択すると、選択したフォルダの.jp [e] gと.tif [f]画像をスキャンして一覧に表示し、どの画像を切り抜きたいのかを尋ねる別のフォームが開きますオプション。その後、メインフォームに戻り、そのフォームから選択した画像のリストを表示し、それぞれの画像の中にBackgroundWorker
を入れてクロッピングフォームにロードし、クロップして保存します。
プロトタイプ作成のために私は画像の読み込みを混乱させる。選択フォームのフォルダ内のすべての画像がロードされた後、選択された各画像がクロッピングで1つずつ読み込まれ、もう一度メインフォームでトリミングされて保存されます。大きな画像の場合、このアプリケーションはTIFFソース画像を最悪の場合のシナリオで約4000px まで扱うため、タスクに時間がかかる可能性があります。
各Bitmap
を一度グローバル配列にロードする方法があると思いますが、これはVisual BasicまたはVB for Applicationsになります。私はBackgroundWorker
を使用しているので、スレッドの安全性と、安全でない方法で何かにアクセスしようとすることについてC#が怒鳴るかどうかについても心配する必要があります。単一の画像がBitmap
オブジェクトに読み込まれる回数を制限しながら、アプリの目的をどのように達成できるかについてのアイデアはありますか?
あなただけの辞書を通過し、それらの
MemoryMappedFile
オブジェクトを取り除く清掃...私は...としてそれが通されていない書きます以下のYahiaは、インスタンス化されたビットマップはスレッドセーフであるとは保証されていません。リスト(T)もそうではないことがわかりました。 –