Ho una macchina fotografica e sto leggendo le immagini in tempo reale in un array. Sto applicando qualche algoritmo all'immagine e mostrandola. Quindi ottengo l'immagine successiva e la visualizzo. Quindi sto trasmettendo le immagini dalla fotocamera al display. Tuttavia, voglio anche salvare le immagini sul disco rigido dopo averle visualizzate. Ho provato ad usare il thread principale ma tutto ha rallentato troppo. Ho quindi provato a usare ThreadPool (vedi il codice sotto). Questo non rallenta lo schermo ma ho trovato che le immagini non vengono salvate correttamente. Sembra che non siano nell'ordine previsto e dopo che sono state salvate circa 50 immagini, i successivi dati dell'immagine appaiono confusi. Immagino che vengano avviati troppi thread.Come si salvano i file sul disco rigido in un thread separato?
C'è un modo migliore per farlo? Penso di aver bisogno di un solo thread per salvare le immagini. Forse una specie di coda che salva ogni immagine in sequenza. Fintanto che è fatto in background e non rallenta il display. Se qualcuno potesse pubblicare uno snippet di codice sarebbe fantastico.
short[] image1 = new short[20000];
while(streaming)
{
ReadImageFromCamera(ref image1)
ImageData data;
data.fileName = imageNumber;
data.image = image1;
ThreadPool.QueueUserWorkItem(WriteImageToFile, data); // Send the writes to the queue
}
private void WriteImageToFile(object imageData) {
try {
ImageData data = (ImageData)imageData;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
string fName = myDirectory + @"/" + Convert.ToString(data.fileName) + @".spe";
using (Stream myStream = new FileStream(fName, FileMode.Create)) {
bf.Serialize(myStream, data.image);
}
}
catch (Exception) { }
}
corto [] image1 = nuovo abbreviazione [20000]; Sono sicuro che tu sia sicuro che la tua immagine non richieda più di quei 40000 byte. –
'ReadImageFromCamera' copia i dati nell'array passato o crea un nuovo array assegnato a' image1'? –
sì, mi dispiace solo per l'illustrazione. Le immagini variano in dimensioni a seconda delle impostazioni dell'utente (ma non una volta che lo streaming è iniziato). Sto leggendo tutti i dati dell'immagine OK quindi nessun problema lì. – Doug