我希望有人可以幫助我編程解決方案。我目前有一臺機器可以獲取傳送帶上物品的位圖圖像。大約每5秒從相機中獲取一張圖像。我需要存儲(緩存在內存中)最近的4個圖像左右。幾乎就像一個堆棧,每次獲取新圖像時,我都需要它在堆棧頂部,並將其他堆棧向下推,以便最後(最舊)的圖像被丟棄。我正在考慮使用一個集合來存儲這些位圖。當我添加位圖時,我還將添加標識圖像的唯一「密鑰」。由於事情需要在這臺機器上同時運行,我正在考慮使用BlockingCollection,以便它們使用生產者 - 使用者方法(從我所研究的內容)在自己的線程上運行。但是,我沒有這方面的經驗,也不知道如何開始。如何使用BlockingCollection進行圖像緩存
這些圖像後取和緩存到我的收藏,該項目輸送機向下移動一小會兒,然後又拍攝圖像相同的部分用不同的相機。在第二張圖像上執行檢查,如果確定「失敗」,我需要將第二張圖像保存到磁盤並保存該部分的前一張圖像(來自第一臺相機)。這就是爲什麼我需要緩存它們並能夠檢索它們。
注:攝像機沒有彼此相鄰,使得第二圖像在所述第一後立即獲得的。在他們到達第二臺攝像機之前,有多達2或3個部件可能會經過第一臺攝像機(因爲他們正在經歷一個過程)。
我的想法是 1)。在我的GUI線程中,我想創建一個集合類的實例來存儲位圖圖像以及它們的唯一鍵。當一個項目被添加到集合中時,add方法將確定集合計數並自動刪除最舊的一個。 2)。在某些情況下(如上所述,在第二臺攝像機「失敗」),我將需要檢查/抓取集合中的圖像。我想使用TryTake方法,以便它可以從集合中獲取位圖(基於我提供的密鑰)。我不想從集合中抓取圖像來干擾在同一時刻添加圖像的可能性。 3)。最後,一旦我從集合中獲得圖像,我需要將該圖像與第二張圖像一起保存到磁盤。我希望保存過程也可以在自己的線程上運行,以免在保存過程中影響性能或應用程序需要使用集合的能力。
我不知道如何開始這個除了創建一個名爲cImageCache類,並添加屬性的唯一關鍵。任何C#或VB.NET編程示例/幫助將不勝感激!非常感謝您的寶貴時間。
最親切的問候
歡迎來到SO!我們不會爲你編碼。我建議你製作一個原型並重新發布你有的任何問題,但你首先需要對它進行一次刺探。另外,你不需要在問題中打個招呼或簽名。 –
謝謝瑞恩。我正在努力工作,並在週末的空閒時間嘗試着解決這個問題。我發現這個論壇非常有用很多次,並且相信至少可以提供一些示例代碼,如果你願意的話可以提供一些示例代碼,以便開始使用。不要求寫它,但如何使用BlockingCollection,存儲位圖,使用TryTake等在類似的例子中,這絕對會幫助我。 – DataCrypt