Hy Tout le monde! Je ai un problème à saisir des images à partir d'une caméra IP Panasonic au format JPEG en fait le problème est avec le fps parce que le fps reste toujours 1 ou 2 pas plus que cela, mais la caméra prend en charge jusqu'à 30 le modèle de came Panasonic WV-SP302E je suis en utilisant le code C# suivant pour saisir l'image et l'afficher dans mon winForms applicationComment saisir des images au format JPEG en plus haute fps à partir de la caméra IP
public partial class Form1 : Form
{
// indicates wether to prevent caching in case of a proxy server or not
private bool preventCaching = false;
public Form1()
{
InitializeComponent();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
this.pictureBox1.Image = this.GetSingleFrame(@"http://ipaddress/SnapshotJPEG?Resolution=320x240&Quality=Standard");
}
}
/// <summary>
/// Get a single JPEG frame from the camera
/// </summary>
/// <param name="source">JPEG Stream source</param>
/// <exception cref="WebException">If the IP camera is not receable or an error is occured</exception>
/// <exception cref="Exception">If an unknown error occured</exception>
public Bitmap GetSingleFrame(string source)
{
byte[] buffer = new byte[512 * 1024]; // buffer to read stream
HttpWebRequest req = null;
WebResponse resp = null;
Stream stream = null;
Random rnd = new Random((int)DateTime.Now.Ticks);
try
{
int read, total = 0;
// create request
if (!preventCaching)
{
req = (HttpWebRequest)WebRequest.Create(source);
}
else
{
req = (HttpWebRequest)WebRequest.Create(source + ((source.IndexOf('?') == -1) ? '?' : '&') + "fake=" + rnd.Next().ToString());
}
// set login and password
req.Credentials = new NetworkCredential("root", "a");
req.Timeout = -1;
resp = req.GetResponse();
// get response stream
stream = resp.GetResponseStream();
// loop
do
{
read = stream.Read(buffer, total, 1024);
total += read;
}
while (read != 0);
Bitmap bmp = (Bitmap)Bitmap.FromStream(new MemoryStream(buffer, 0, total));
return bmp;
}
catch (WebException ex)
{
string s = ex.ToString();
return null;
}
catch (Exception ex)
{
string s = ex.ToString();
return null;
}
finally
{
// abort request
if (req != null)
{
req.Abort();
req = null;
}
// close response stream
if (stream != null)
{
stream.Close();
stream = null;
}
// close response
if (resp != null)
{
resp.Close();
resp = null;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync();
}
}
Je suis même en utilisant le composant backgrounworker pour saisir des images dans un autre fil, mais encore 2 images par seconde. Toute idée comment augmenter le fps
Merci pour votre suggestion j'ai vérifié l'im âge saisissant la progression en ajoutant un élément dans une liste pour représenter la date et l'heure de saisie de l'image. Cette liste montre également deux entrées pour chaque seconde donc je pense que le problème se situe ailleurs. –