У меня есть камера, и я читаю изображения в реальном времени в массив. Я применяю некоторый алгоритм к изображению и отображаю его. Затем я получаю следующее изображение и отображаю его. Поэтому я передаю изображения с камеры на дисплей. Однако я также хочу сохранить изображения на жесткий диск, как только я их покажу. Я попытался использовать основной поток, но все замедлилось слишком сильно. Затем я попытался использовать ThreadPool (см. Код ниже). Это не замедляет отображение, но я обнаружил, что изображения не сохраняются должным образом. Похоже, что они не в ожидаемом порядке, и после сохранения примерно 50 изображений последующие данные изображения выглядят искаженными. Я предполагаю, что слишком много потоков запускается.Как сохранить файлы на жесткий диск в отдельном потоке?
Есть ли лучший способ сделать это? Кажется, мне нужен только один поток, чтобы сохранить изображения. Может быть, какая-то очередь, которая сохраняет каждое изображение последовательно. До тех пор, пока это делается в фоновом режиме и не замедляет отображение. Если кто-то может опубликовать фрагмент кода, который был бы фантастическим.
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) { }
}
короткий [] изображение1 = новый короткий [20000]; Я уверен, что вы уверены, что ваш образ не займет больше 40000 байт. –
Выполняет ли 'ReadImageFromCamera 'копирование данных в массив, который вы передаете, или же он создает новый массив, который присваивается' image1'? –
да простите, что только для иллюстрации. Изображения различаются по размеру в зависимости от пользовательских настроек (но не сразу после начала потоковой передачи). Я читаю все данные изображения ОК, поэтому проблем нет. – Doug