Pb de pointeur...

didrocks Messages postés 73 Date d'inscription samedi 11 janvier 2003 Statut Membre Dernière intervention 17 décembre 2007 - 18 janv. 2003 à 15:22
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! :)

3 réponses

trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
19 janv. 2003 à 00:04
-------------------------------
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! :)
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
19 janv. 2003 à 10:48
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;
}
0
trinitacs Messages postés 249 Date d'inscription mardi 16 juillet 2002 Statut Membre Dernière intervention 7 août 2003 2
19 janv. 2003 à 12:39
-------------------------------
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! :)
> >
>
0
Rejoignez-nous