williamcplusplus
Messages postés20Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention16 juin 2009
-
19 juin 2008 à 14:45
williamcplusplus
Messages postés20Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention16 juin 2009
-
4 juil. 2008 à 13:14
bjr tt le monde!
je developpe une interface d'acquisition d'image avec visual studio c++, masi j'ai du mal enregistrer mes images. l'idée est d'enregistrer un certain nombre d'image (imnumber), leur donner un nom (imname); il faut noter que le nom comprend un numéro (imnumero) incrémenter automatiquement.
j'utilise la fonction save (windows forms) pour faire l'enregistrement.
mon code est:
int imnumero=12;
int
imnumber=15;
char
name[80];
char
nom[80]=
"image"
;
int
*pnumber=&imnumber;
int
*pimnumero=&imnumero;
int
counter=0;
for
(;counter<*pnumber;)
{
for
(
int
i = 0; i< 80;i++) {
name[i] = 0;
//sprintf_s(name,"image%03d.bmp", imnumero);
sprintf_s(name,
"%s.%d.bmp"
, nom, imnumero);}
counter++;
dialog_expert::pictureBox1->Image->Save(
"c:\\name"
);*pimnumero+=1;
}
}
Dès que je compile ça m'affiche un message du genre:
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D6) : Nombre différent de méthodes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués
dialog_expert.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D7) : Nombre différent de champs dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131187) : Déclarations de méthodes incohérentes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D6) : Nombre différent de méthodes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (80131188) : Déclarations de champs incohérentes dans des types dupliqués (types : Ekta.dialog_expert ; champs : button8) : (0x04000019).
Image_visible.obj : error LNK2022: échec de l'opération sur les métadonnées (801311D7) : Nombre différent de champs dans des types dupliqués
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 19 juin 2008 à 15:02
Hello,
y'a un souci dans la façon de faire: "C:\\name" est une chaine de caractères qui représente le répertoire nommé name du disque C. J'imagine que tu voulais que name soit interprété. Dans ce cas, il faut que ton sprintf soit plus complet et contienne le chemin de ton image (et pas juste le nom)
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 19 juin 2008 à 15:39
ok, tu as ptet un souci alors dans la déclaration de ton objet dialog_export et/ou dans les prototypes de ses fonctions. Le message d'erreur semble indiqué qu'il est déclaré plusieurs fois, mais pas avec les mêmes prototypes de fonctions...
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Vous n’avez pas trouvé la réponse que vous recherchez ?
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 24 juin 2008 à 18:39
Ah ok...
Sorry, j'étais à côté de la plaque.
Alors, l'idée du timer est donc, effectivement, de lancer à intervalle régulier une action. Dans ton exemple, tu as crée un timer qui, toutes les 10 secondes, appelera la fonction "OnTimedEvent()". Or toi, tu veux appeler la fonction save(), qui se trouve être la fonction button9_Click()
Dans ton cas, il te suffit donc de remplacer
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
par
aTimer.Elapsed += new ElapsedEventHandler(button9_Click);
Ai-je répondu à ta question?
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
williamcplusplus
Messages postés20Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention16 juin 2009 20 juin 2008 à 13:29
slt encore un ti souci!
mon code pour l'enregistrement d'image est:
int
imnumero=12;
int
imnumber=15;
char
name[80];
//char nom[80]="C:\\image" ;
char
nom[80]=
"c:\\image";
for
(
int counter=0; counter"%s%d.png" , nom, imnumero);
this->pictureBox1->Image->Save(name);imnumero++;
}
}
le programme n'accepte pas que je lui passe name en paramètre. Normalement, je devrais mettre de guillemets, mais comme name reuslte de sprintf_s, je ne peux pas "name"à la fonction save .
le message d'erreur est du genre:
error C2664: 'void System::Drawing::Image::Save(System::String ^)' : impossible de convertir le paramètre 1 de 'char [80]' en 'System::String ^'
Raison : impossible de convertir de 'char *' en 'System::String ^'
Aucun opérateur de conversion défini par l'utilisateur disponible, ou
Impossible de convertir un type non managé en type managé
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 20 juin 2008 à 13:57
Attention! Tu es en train de mélanger le C++ et le C#
Du coup, il faut d'abord que tu crée un objet String (genre String maString=name;) avant de le passer en paramètre de la fonction Save.
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
williamcplusplus
Messages postés20Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention16 juin 2009 23 juin 2008 à 12:24
slt!le code pour l'enregistrement que j'ai écrit est finalement:
private: System::Void button9_Click(System::Object^ sender, System::EventArgs^ e){
int imnumero=12;
int imnumber=15;
char name[80];
char nom[80]= "c:\\image";
for (int counter=0; counterpictureBox1->Image->Save(gcnew String(name));
imnumero++;
}
}
___________________________________________________________
Mais je voudrais intégrer un chronomètre pour pouvoir déterminer l'intervalle de temps entre chaque enregistrement.
sur le site de microsoft http://msdn.microsoft.com/fr-fr/library/k0wdddfy(VS.80).aspx le code ressemble à ceci:
using System;
using System.Timers;
publicclass Timer2
{
publicstaticvoid Main()
{
// Create a timer with a ten second interval.
System.Timers.Timer aTimer = new System.Timers.Timer(10000);
// Hook up the event handler for the Elapsed event.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Only raise the event the first time Interval elapses.
aTimer.AutoReset = false;
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
// Keep the timer alive until the end of Main.
GC.KeepAlive(aTimer);
}
// Specify what you want to happen when the Elapsed event is
// raised.
privatestaticvoid OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("Hello World!");
}
}
Mais je n'arrive pas l'intégrer.
Merci
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 24 juin 2008 à 09:25
Salut,
Les timers ne me semblent pas appropriés dans ce cas.
Tu n'as pas réussi avec les infos que je t'ai filées? L'objet DateTime te permet de faire ce que tu veux:: Dans ta classe, tu déclares un membre de type DateTime que t'initialise à DateTime.Now. Ensuite, à chaque enregistrement, tu fais la différence entre DateTime.Now et la valeur de ta variable membre: tu auras le delta tmeps entre chaque appel à la fonction enregistrement
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
williamcplusplus
Messages postés20Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention16 juin 2009 24 juin 2008 à 17:59
slt buno! je n'ai pas consulté ma boite depuis hier.je crois ke je m'étais mal exprimé.
si tu veux mon but était de déclencher l'enregistrement après un temps donné( intervalle). et non calculer l'intervalle de temps entre chaque enregistrement. par exemple , je veux qu'il y ait 10 secondes entre le premier et le deuxième enregistrement.
williamcplusplus
Messages postés20Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention16 juin 2009 24 juin 2008 à 19:23
merci buno.
encore une dernière question.
mon intervalle de temps, je l'ai à partir d'un textbox. J'ai vu sur msdn que je peux récuperer les données entrées dans ce text box grâce à la fonction: virtual void GetDlgItem(
int nID,
HWND* phWnd
) const;
ou int GetWindowText(
HWND hWnd,
LPTSTR lpString,
int nMaxCount );
mais le problème est que le compilateur ne reconnait pas item (pour la fonction getdlgitem)
Je peux par exemple écrire:
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 25 juin 2008 à 09:27
Hello,
Attention mon petit WilliamC++, pour ton interface, tu as utilisé les WinForms. Les fonctions que tu me cite sont pour les MFC pour pour l'API Win32 directement.
Si je ne dis pas de bêtises, pour les WinForms, tu peux directement accéder au texte en faisant maTexBox.Text, aussi bien en lecture qu'en écriture d'ailleurs
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...