Tengo una cámara y estoy leyendo las imágenes en tiempo real en una matriz. Estoy aplicando algún algoritmo a la imagen y mostrándola. Luego obtengo la siguiente imagen y la visualizo también. Así que estoy transmitiendo imágenes de la cámara a la pantalla. Sin embargo, también quiero guardar imágenes en el disco duro una vez que las haya mostrado. Intenté usar el hilo principal pero todo se ralentizó demasiado. Luego intenté usar ThreadPool (ver código a continuación). Esto no ralentiza la visualización, pero he encontrado que las imágenes no se están guardando correctamente. Parece que no están en el orden esperado y después de que se han guardado unas 50 imágenes, los datos de imagen subsiguientes parecen distorsionados. Supongo que se están iniciando demasiados hilos.¿Cómo guardo los archivos en el disco duro en un hilo separado?
¿Hay una mejor manera de hacerlo? Creo que solo necesito un hilo para guardar las imágenes. Tal vez algún tipo de cola que guarda cada imagen secuencialmente. Siempre que se haga en segundo plano y no ralentice la pantalla. Si alguien pudiera publicar un fragmento de código sería fantástico.
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 [] imagen1 = nuevo corto [20000]; Estoy gessing, estás seguro de que tu imagen no toma más de esos 40000 bytes. –
¿'ReadImageFromCamera' copia los datos en la matriz que pasa, o crea una nueva matriz que está asignada a' image1'? –
Sí, lo siento, solo por ilustración. Las imágenes varían en tamaño dependiendo de la configuración del usuario (pero no una vez que la transmisión ha comenzado). Estoy leyendo todos los datos de la imagen, así que no hay problemas allí. – Doug