J'ai une caméra IP et J'ai des problèmes pour lire les données d'image de cet appareil photo. Pour lire l'image que je dois envoyer la commande à la caméra et lire: 1) Longueur Télégramme 2) ID de réponse Obtenir l'image 3) Code erreur 4) Type image 5) Image Résultats 6) Nombre de lignes, colonnes 7) Données d'imageC# Lire toutes les données Caméra IP utilisant TCP
Pour lire le formulaire de données, les points 1 à 6 ne posent aucun problème car ce n'est que 14 octets. Au point 6, j'ai lu la taille de l'image. Par exemple laissez nombre de lignes et les colonnes seront 640x480 donc nous avons 307200 octets.
Pour lire l'image J'utilise Visual Studio 2010 et WindowsForm application et le bouton sous forme d'action:
private void butReadImage_Click(object sender, EventArgs e)
{
// code to read data from point 1 to 6
// start read data image (point 7)
}
En butReadImage_Click
je peux lire seulement 7000 octets de données d'image parce que l'appareil photo ne pas envoyer toutes les données d'image un paquet. Pour lire toutes les données activer minuterie (intervalle de 1 ms) en utilisant un butReadImage_Click
puis
private void timReadImage_Tick(object sender, EventArgs e)
{
// read rest data form camera, about two data packets
int numberOfBytesRead;
while (rwSensorStream.DataAvailable)
{
numberOfBytesRead = rwSensorStream.Read(BinaryImageData_Byte_14_n, 0, BinaryImageData_Byte_14_n.Length);
tempRC = tempRC + numberOfBytesRead;
for (int i = 0; i < numberOfBytesRead; i++)
{
image.Add(BinaryImageData_Byte_14_n[i]);
}
}
}
Je maintenant que cela est mauvais code en utilisant la minuterie. Est-ce que quelqu'un a une idée comment lire toutes les données envoyées dans plusieurs paquets ?.
Vous pouvez 1) Bloquer le code en cours d'exécution jusqu'à ce que vous avez lu toutes les données 2) Lire les données de manière asynchrone. – fshauge