Pb de pointeur...

Messages postés
73
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
17 décembre 2007
- - Dernière réponse : trinitacs
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
- 19 janv. 2003 à 12:39
Voici une de mes fonctions:

void Main::LoadBmp(geBitmap *Bmp, char *NomFichier)
{
geVFile *File;
int temp;
/*
if (m_Height==800)
*NomFichier ="E" && *NomFichier;
else
*NomFichier="S" && *NomFichier;
*/
File = geVFile_OpenNewSystem(NULL, GE_VFILE_TYPE_DOS, NomFichier, NULL, GE_VFILE_OPEN_READONLY);

}

Ex d'utilisation LoadBmp(Bitmap1,"coucou.bmp")
le pb vient de ce que j'ai mis entre /* */
J'aimerai, (suivant la résolution comme tu peux le voir) que si on est en 800*600, le fichier ouvert soir Ecoucou.bmp ou sinon Scoucou.bmp. Mais je n'arrive pas à le faire! qqn peut me renseigner sur l'utilisation des pointeurs dans ce cas? (la fonction feVFile_Op..... attends un pointeur en 3ème paramètre)

Merci par avance! :)
Afficher la suite 

3 réponses

Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
0
Merci
-------------------------------
Réponse au message :
Le problème vient de l'utilisation de l'opérateur binaire &&. C'est le Et. Je pense que tu voulais rajouter "E" ou "S" devant le fichier. On ne procède pas de cette manière car l'opérateur && est utilisée pour les conditions multiples. Pour rajouter qqch à une chaîne tu dois utiliser la fonction
str3 = strcat( str1, str2 );
où str2 sera rajoutée à str1 et le résultat sera stocké dans str3. Sache que str1 est inchangé. La fonction strcat est dans le fichier string.h et tu pourras y trouver ces semblabe comme strcpy etc ...

Si je peux te donner une conseil. A t'a place je n'utiliserai pas 2 images pour 2 résolutions possible. Mais je créerais plutot une fonction qui ferait une homotétie de l'image. Ça te permetttera de rendre ton prog plus extensible et facil à entretenir.
-------------------------------

> Voici une de mes fonctions:
>
> void Main::LoadBmp(geBitmap *Bmp, char *NomFichier)
> {
> geVFile *File;
> int temp;
> /*
> if (m_Height==800)
> *NomFichier ="E" && *NomFichier;
> else
> *NomFichier="S" && *NomFichier;
> */
> File = geVFile_OpenNewSystem(NULL, GE_VFILE_TYPE_DOS, NomFichier, NULL, GE_VFILE_OPEN_READONLY);
>
> }
>
> Ex d'utilisation LoadBmp(Bitmap1,"coucou.bmp")
> le pb vient de ce que j'ai mis entre /* */
> J'aimerai, (suivant la résolution comme tu peux le voir) que si on est en 800*600, le fichier ouvert soir Ecoucou.bmp ou sinon Scoucou.bmp. Mais je n'arrive pas à le faire! qqn peut me renseigner sur l'utilisation des pointeurs dans ce cas? (la fonction feVFile_Op..... attends un pointeur en 3ème paramètre)
>
> Merci par avance! :)
Commenter la réponse de trinitacs
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
7
0
Merci
exact
de plus, les * devant NomFichier sont suspectes
voici un exemple simple de concaténation :

#include
using namespace std;

int main()
{
char nomFichier[]="test.txt";
char resultat[25]="E";//init
strcat(resultat, nomFichier);//concat
cout << resultat << endl;//affiche "Etest.txt"
return 0;
}
Commenter la réponse de cs_vieuxLion
Messages postés
249
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
7 août 2003
1
0
Merci
-------------------------------
Réponse au message :
Je répond au mail que tu m'a envoyé sur le forum pour que ça serve à d'autres par hasard.

Une homotétie c'est un agrandissement ou l'inverse. Un peu comme un zoom.

On va partir du principe que tu as une structure ou une classe bitmap. Celle ci stocke l'image sous forme d'un tableau. Un tableau de char si il y a 256 couleur oude int en 24 bit (rbg) et il reste un octect pour l'alpha. Bon bref on a un tableau.

Si tu veux l'agrandir de 2 tu va devoir créer une deuxième variable bitmap mais avec un tableau deux fois plus grand. Donc tu recopiera chaque pixel (chaque élément du tableau) deux fois dans le nouveau bitmap.

Si tu veux le réduire tu fais la même chose en sens inverse. Tu recopieras un pixel sur deux.

Ici j'ai pris des cas simples ( * 2 ou / 2 ) mais tu peus aussi le faire avec un facteur de 1.12345 si tu le veux.

Donc en gros tu fais un sorte de règle de 3 pour savoir quel pixel tu va recopier sur le bitmap de destination.

J'espère avoir été clair, et si tu veux des précision ou un exemple de code source demande le moi ;)
-------------------------------

> exact
> de plus, les * devant NomFichier sont suspectes
> voici un exemple simple de concaténation :
>
> #include
> using namespace std;
>
> int main()
> {
> char nomFichier[]="test.txt";
> char resultat[25]="E";//init
> strcat(resultat, nomFichier);//concat
> cout << resultat << endl;//affiche "Etest.txt"
> return 0;
> }
>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > Le problème vient de l'utilisation de l'opérateur binaire &&. C'est le Et. Je pense que tu voulais rajouter "E" ou "S" devant le fichier. On ne procède pas de cette manière car l'opérateur && est utilisée pour les conditions multiples. Pour rajouter qqch à une chaîne tu dois utiliser la fonction
> > str3 = strcat( str1, str2 );
> > où str2 sera rajoutée à str1 et le résultat sera stocké dans str3. Sache que str1 est inchangé. La fonction strcat est dans le fichier string.h et tu pourras y trouver ces semblabe comme strcpy etc ...
> >
> > Si je peux te donner une conseil. A t'a place je n'utiliserai pas 2 images pour 2 résolutions possible. Mais je créerais plutot une fonction qui ferait une homotétie de l'image. Ça te permetttera de rendre ton prog plus extensible et facil à entretenir.
> > -------------------------------
> >
> > > Voici une de mes fonctions:
> > >
> > > void Main::LoadBmp(geBitmap *Bmp, char *NomFichier)
> > > {
> > > geVFile *File;
> > > int temp;
> > > /*
> > > if (m_Height==800)
> > > *NomFichier ="E" && *NomFichier;
> > > else
> > > *NomFichier="S" && *NomFichier;
> > > */
> > > File = geVFile_OpenNewSystem(NULL, GE_VFILE_TYPE_DOS, NomFichier, NULL, GE_VFILE_OPEN_READONLY);
> > >
> > > }
> > >
> > > Ex d'utilisation LoadBmp(Bitmap1,"coucou.bmp")
> > > le pb vient de ce que j'ai mis entre /* */
> > > J'aimerai, (suivant la résolution comme tu peux le voir) que si on est en 800*600, le fichier ouvert soir Ecoucou.bmp ou sinon Scoucou.bmp. Mais je n'arrive pas à le faire! qqn peut me renseigner sur l'utilisation des pointeurs dans ce cas? (la fonction feVFile_Op..... attends un pointeur en 3ème paramètre)
> > >
> > > Merci par avance! :)
> >
>
Commenter la réponse de trinitacs