IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Passer un buffer en paramètre d'une fonction


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut Passer un buffer en paramètre d'une fonction
    Bonjour à vous !

    J'ai codé une méthode de classe qui inverse verticalement un buffer d'image (tableau 2D de RGBA = 4 octets) et retourne le résultat.

    Voilà le prototype de ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void * retourneBuffer(void *);
    Je me demande si je gagne quelque chose en temps passant plutôt un pointeur sur le pointeur ou bien si cela ne sert à rien du tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ** retourneBuffer(void **);
    Merci de bien vouloir me dire ce que vous en pensez

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca ne servirait à rien d'autre qu'à introduire un niveau d'indirection supplémentaire et surtout inutile.

    Tu passes en paramètre un pointeur sur la zone mémoire contenant tes pixels, dur de faire plus optimisé.

    Par contre pourquoi passer un void* si le type des pixels est bien connu ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Merci, je pensais aussi qu'un pointeur n'était pas "recopié".

    Ta question tombe bien parce que j'ai justement une nouvelle interrogation à ce propos.

    Finalement, le format de mes images n'est pas toujours le même. Selon la valeur d'un attributs de ma classe, mon traitement diffère.

    Notamment, je traitait du RGBA (4 octets par pixels), mais maintenant je veux faire des tests sur du RBG tout simple (donc 3 octets).

    Je faisais un cast en (int*) pour copier directement les pixels, mais pour le RGB il me faudrait quelque chose faisait 3 octets comme taille... Autrement, j'utilise des char * mais du coup ça me fait une boucle de plus à imbriquée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Pour des pixels de taille 4 octets
    for(int i = 0; i < height ; i++) {
    	for(int j = 0; j < width ; j++) {
    		// On inverse l'image
    		bufferOut[index] = ((int *)bufferIn)[(height-i) * width + j];
    		index++;
    	}
    }
    Et si maintenant, je considère mon BufferIn comme un char * :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Pour des pixels de taille 3 octets ??
    for(int i = 0; i < height ; i++) {
    	for(int j = 0; j < width ; j++) {
    		for(int k = 0; k < 3 ; k++) { // boucle en plus ...
    			// On inverse l'image
    			bufferOut[index] = ((char *)bufferIn)[(height-i) * width + j + k];
    			index++;
    		}
    	}
    }
    Est-ce qu'il y a moyen de faire autrement que trois boucles imbriquées ?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Manipuler tes pixels sous forme de pointeur sur char + taille d'un pixel te permettra toujours de faire les traitements sur pixels sans te soucier de leur format, ce qui est plutôt pas mal. Si tu veux absolument que le type manipulé colle avec le format des pixels, il faudra faire des trucs plus compliqués. Mais bon pour inverser une image par exemple je doute qu'il faille en savoir plus sur le format des pixels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/12/2009, 12h38
  2. [Flux] passer un ifstream en paramètre d'une fonction
    Par yoshï dans le forum Débuter
    Réponses: 4
    Dernier message: 03/12/2009, 15h51
  3. [Débutant] Comment passer un fichier en paramètre d'une fonction?
    Par Rires et Chansons dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/10/2007, 21h12
  4. Passer un pointeur en paramètre d'une fonction
    Par oranoutan dans le forum C
    Réponses: 18
    Dernier message: 11/09/2007, 21h48
  5. Passer un curseur en paramètre d'une fonction?
    Par Lafoudre dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2007, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo