Stroumi
Messages postés7Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention30 mars 2009
-
16 févr. 2009 à 10:16
Stroumi
Messages postés7Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention30 mars 2009
-
19 févr. 2009 à 11:34
Bonjour tout le monde, j'aurai besoin de votre aide si possible...
Voila, je m'explique. Pour mon projet, je dois controler et recupérer une les images d'une camera. Pour cela, j'utilise la SDK fournie. La fonction qui récupère l'image est une fonction static et elle enregristre l'image sur le disque dur.
Ce que je voudrai faire, c'est modifier le code afin de directement récupérer cette image et la mettre sur ma pictureBox.
Dis comme ca, c'est pas super compliqué (enfin, je pense pas que ca l'est de tte facon), je m'embrouille avec cette fonction static, car je peux pas appeler ma picturebox a l'intérieur... Enfin, je vous montre les parties du code les plus importantes:
* On commence par définir notre callback :
* Il est appel‚ par le SDK … chaque fois qu'une nouvelle image est disponible.
* Ce callback est pour une image 8 bits (WM_IMAGE_READY)
*/
callback =
new
CS_Callback_8(image_callback);
hnd = VC_registerCallback(WM_IMAGE_READY, callback);
...
Ca, c'est ce qu'il y a sur le SDK. moi, j'ai crée ma petite application en C# avec mes picturebox et le reste. J'arrive a appeler les fonction, mais je voudrai qu'au lieu d'enregistrer l'image, elle aille directement sur une pictureBox chaque fois que l'image est prete.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 16 févr. 2009 à 11:01
Salut.
Le plus simple est encore de mettre en attribut une référence à ta PictureBox, et de remplacer img.Save() par l'insertion de ton image dans la picturebox :
class
MaClasse
{
private
PictureBox
maPictureBox; // Que tu initialises via le constructeur ou une propriété par exemple
Ainsi dans ta Form, il te suffira de faire:
maPictureBox.image = image_callback(...);
Bonne journée,
Billou_13
Bask En Force
--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
DateTime time = DateTime.Now;
TimeSpan second = TimeSpan.FromSeconds( 1 );
while( mainForm.Created )
{
if ( ( DateTime.Now - time ) > second )
{
time = DateTime.Now;
mainForm.Callback( time );
}
ed73
Messages postés276Date d'inscriptionlundi 8 septembre 2008StatutMembreDernière intervention15 avril 20132 16 févr. 2009 à 11:59
A mon avis image_callback ne peut pas renvoyer une image car son prototypage est défini par le SDK. Quand bien même elle en renverrait une, il ne serait pas possible de la récupérer.
Il me semble que la solution pourrait être d'avoir une référence à ta picturebox dans une classe statique, initialisée par le constructeur de la picturebox, et d'utiliser cette référence dans image_callback
Stroumi
Messages postés7Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention30 mars 2009 16 févr. 2009 à 12:16
J'ai un soucis avc la caméra, du coup, je peux pas encore la faire marcher, enfin, cet apres midi je pourrai, du coup je pourrai tester vos solutions.
J'ai reussi à appeler mon attribut (picturebox ou Bitmap) dans ma fonction callback, tout simplement en les déclarant en static aussi. Du coup, je vais tenter ca.
Sinon, je peux modifier la fonction callback afin qu'elle retourne le Bitmap. Mais le soucis avec ca, c'est que je sais pas ou appeler :
maPictureBox.image = image_callback(...);
Car "Image_callback" est un évenement, du coup, je dois faire quoi ? créer un autre événement C# qui me dis quand la fonction "Image_callback" est terminé... un évenement pour un autre évenement..
Stroumi
Messages postés7Date d'inscriptionmardi 15 mai 2007StatutMembreDernière intervention30 mars 2009 19 févr. 2009 à 11:34
Salut,
deja, je vous remercie tous pour vos conseils, j'ai trouvé plusieurs
solution mais la plus propre etait de créer un nouvel event et modifier la
fonction afin qu'elle revoie le Bitmap...
Mais j'ai 2 autres soucis
:
- la mémoire ne cesse d'augmenter, j'ai beau mettre des Dispose() sur mes
Bitmap, remettre ma picturebox a null, le probleme est toujours la.
- l'autre
soucis vient du fait que l'affichage est assez lent, la camera doit envoyer une
image chaque seconde, mais le tps que ma fonction fasse sa boucle en longeur et
largeur de mon Bitmap pour le remplir, ca prend un certain tps, du coup,
j'affiche une image touts les 3 secondes. Je sais que mes images sont enorme
(9600,750), mais n'y a t'il pas un autre moyen que de faire cette boucle
pour remplir ma Bitmap ?