Up!
essaie quelque chose comme ça:
(pas testé)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void CMyImage::GetCapturedImage(BYTE* Image) { for (int i=0;i++;i<getLength(Image);i++) { m_CapturedImage = Image[i]; } }
Le principe est de créer un nouveau tableau (totalement indépendant de Image) en copiant chaque valeur de Image.
Ca ne change pas le problème; l'image est bien récupérée comme ça ou simplement en récupérant seulement le pointeur.
Le problème, c'est quand on va vouloir venir chercher cette variable à partir d'une autre classe, m_CapturedImage aura disparue, quel que soit son type.
oui, elle aura disparue car le pointeur aura été modifié. Ce problème est récurrent en C++: on pense copier un objet alors qu'en fait, on pointe sur un autre.
Si le pb ne vient pas de là, je ne vois pas...
Quelle est donc la solution?
Ce que tu m'as conseillé 2 posts plus haut, c'est juste une autre méthode de conservation de mon image (remplir un tableau plutôt que conserver le pointeur qui indique où sont les données de l'image) mais je ne vois pas plus le principe de sauvagarde de quoi que ce soit pour s'en reservir d'où on veut et quand on veut en gros.
tu as essayé? Je pense que ça peut résoudre ton problème.
Oui, oui, j'ai essayé.
Dans void CMyImage::GetCapturedImage(BYTE* Image) {........}
Je n'ai aucun problème pour récupérer les données de mon image.
Mais quand j'appelle une fonction qui se trouve dans une autre classe et qui veut alors récupérer ces données, il n'y a plus moyen! Volatilisé par le destructeur de la classe CMyImage.
Mais comment faire pour sauvegarder tranquillement une donnée à laquelle on peut accéder d'où on veut quand on veut?!
Ca commence à me rendre nerveux cette histoire de fonctionnement des classes.
la mettre en globale. C'est très laid et ça prouve que la conception est mauvaise, et puis tu ne peux pas l'allouer dynamiquement (su je ne me trompe pas)Envoyé par stof
bienvenu dans l'univers du langage objet. Au début, c'est pas évident, mais quand on a bien compris le fonctionnement, c'est extrêment puissant.Envoyé par stof
Quand tu as des problèmes de communication entre tes classes (flux de données) je te conseille de poser ton architecture sur papier. Haaa, le bon vieux papier et le bon vieux crayon![]()
je fais ce que je peux.Envoyé par r0d
Pour la conception, tu connais toute l'histoire : une image est prise et on la traitera ensuite (pas forcément au sein de la même classe!)
C'est donc impossible de faire ça? Et si j'utilise une variable globale, je le fais comment exactement (parce que j'ai essayé mais dans l'autre classe on me dit que m_CapturedImage n'est pas membre de CMyImage maintenant (je l'ai mise en haut de MyImage.cpp : BYTE* m_CapturedImage)
J'ai du papier, des crayons de toutes les couleurs, des bouquins de C++, des rames, mais il me manque juste le cerveau (enfin l'expérience disons).Envoyé par r0d
Ma Classe1 a une fonction qui permet d'obtenir m_variable
Je veux que Classe2 récupère cette variable
Je veux que Classe3 récupère la variable stockée dans Classe2 pour s'en occuper.
Il faut essayer de piger l'architecture DOC/VUE des MFC ;
La classe de document va stocker , comme son nom l'indique la plupart des instances de classes nécessaires à l'appli.
En l'occurence la classe Camera , les images fournies par la caméra.
Pour stocker les images il faut une collection d'objets comme des tableaux dynamiques comme CArray, CObArray ou des listes comme CList etc....
Pour accéder à ces classes CView::GetDocument permet de faire cela.
C'est pour ça que de base par exemple dans CView::OnDraw on a GetDocument
S'inspirer de l'exemple SKETCH du MSDN ( il est fourni avec VC++).
Donc c'est pas une bonne idée de faire une classe spéciale pour contenir les images et leurs paramètres? Faut tout mettre dans la classe de document?Envoyé par mat.M
Ouh là, là... pourtant un pointeur me suffit pour une image puisque je vais lire à partir de cette adresse les valeurs de chaque pixel.Envoyé par mat.M
Pour accéder à ces classes CView::GetDocument permet de faire cela.
C'est pour ça que de base par exemple dans CView::OnDraw on a GetDocument
Ah, j'ai cherché dans mon ordi, je ne l'ai pas (j'ai tout installé pourtant)Envoyé par mat.M
Je crois qu'il n'est que dans VS6, mais point dans le 7Envoyé par stof
![]()
Partager