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 :

Merging de 2 pointeurs


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Par défaut Merging de 2 pointeurs
    Salut amis developpeurs....
    Je voudrais avoir votre point de vue sur quelque chose....

    J'utilise la fonction QT suivante qui retourne un pointeur sur une liste de pixels
    d'image : uchar * QImage::bits ().
    Comme vous pouvez le contaster la classe QImage est associé à une seule image......Ce que je voudrais c'est par exemple si j'appelle la fonction sur 2 images: uchar * pointeur1 = MonImage1.bits();
    uchar * pointeur2 = MonImage2.bits();
    pouvoir rapidement recupérer un seul pointeur fusion qui regroupe pointeur1 et pointeur 2 séquentiellement en mémoire(sans copie d'une partie de la mémoire vers une autre).
    Je sais que moralement c'est impossible mais qui sait..... Etonnez-moi!!!!!!

    Pour ceux qui doutent ce que je désire n'a rien à voir avec QT car ce dernier sert juste à illustrer........
    Merci

  2. #2
    Membre actif
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Par défaut
    Non tu ne peux pas, mais ce que tu peux faire, c'est un tableau de pointeur sur uchar qui auraient pour élément le pointeur1 et le pointeur2.
    Est-ce que ça correspondrait à ce que tu souhaites faire ?

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut
    Citation Envoyé par Aladore Voir le message
    Non tu ne peux pas, mais ce que tu peux faire, c'est un tableau de pointeur sur uchar qui auraient pour élément le pointeur1 et le pointeur2.
    Est-ce que ça correspondrait à ce que tu souhaites faire ?
    Et encore, tu aurais alors deux pointeurs de pointeurs contigu pointant sur deux adresses mémoire qui ne sont pas forcément elle-même contigües.

    Tu ne pourrais donc pas avoir la certitude de, à partir du dernier pixel de la première image que l'incrémentation du pointeur sur ce pixel t'amène réellement au premier pixel de la seconde

    Donc la réponse est: non, tu ne peux pas.

    Soit tu dois forcer la copie des deux tableaux de pixels dans un troisième tableau dont la taille est suffisante, soit tu dois faire en sorte de créer un seul tableau de taille suffisante pour représenter l'ensemble des pixels des deux images et forcer le chargement de la première image à utiliser l'adresse du premier élément de ce tableau et le chargement de la deuxième image à utiliser l'adresse du pixel qui suit le dernier pixel de la première image.

    Mais, a priori, la classe QImage s'occupera elle-même de la gestion du tableau de pixels nécessaire à sa représentation en mémoire, et tu ne peux donc pas appliquer cette deuxième solution
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre actif
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Par défaut
    Oui nous sommes bien d'accord, mais il pourrait faire une double boucle pour traiter l'ensemble des éléments des deux pointeurs non ?

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Le fait est qu'il te faut généralement, déjà, une double boucle pour gérer l'ensemble des pixels d'une seule image, sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for( l=0;l<img.heigth();++l
        for(c=0;c<img.with();++c)
           // utilisation de 
            ptr[l*img.with()+c]
    Tu te retrouverais donc avec non pas une double mais une triple boucle et avec, en plus, une indirection supplémentaire

    Avoue que cela commence tout doucement à faire beaucoup
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Tu peux te faire une classe qui se comportera globalement comme tu le désires. Le plus gros problème sera que ce ne sera pas un pointeur et donc tu ne pourras pas la passer à des fonctions qui en attendent un.

    Je doute que ce soit l'approche à utiliser dans la plupart des cas, mais je peux facilement imaginer des contextes où c'est une solution à envisager sérieusement.

    Avec beaucoup de trous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    template <typename T>
    class MergedRegion
    {
    public:
       MergedRegion(T* p1, size_t s1, T* p2, size_t s2);
     
       T& operator*() { return operator[](current); }
       T& operator[](size_t idx) { return (idx < s1) ? p1[idx] : p2[idx-s1]; }
       MergedRegion& operator++() {++current; return *this}
    };

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    En fait, on ne sait pas ce que Nasboy3D veut faire avec ses images, il me semble que c'est tout de même ça qui est important.
    On peut par exemple imaginer qu'il y deux images, et que le but est de créer une image qui résulte de la combinaison logique au niveau des pixels de ces deux images.
    La notion de séquentiel n'a en général pas de sens pour deux objets. Lorsqu'il s'agit d'image, il y non plus pas beaucoup de chances que le premier pixel de la ligne L+1 suive le dernier pixel de la ligne L. C'est la raison pour laquelle les classes d'image ont une fonction ScanLine() qui renvoie un pointeur sur le premier pixel de la ligne. (ceci est vrai pour toutes les classes d'image que je connais - et pour certains formats la décomposition est encore plus compliquée : pavés, bandes etc.)
    Cependant, d'après l'écriture "uchar *QImage::bits()", on pourrait penser que le tableau de bits est effectivement caractérisé par un pointeur sur un unsigned char. C'est pas beaucoup dans un contexte d'image moderne où on trouve plus souvent des pixels sur 16 ou 32 bits. Donc, de quoi s'agit-il?

Discussions similaires

  1. pointeurs
    Par ghost74 dans le forum C
    Réponses: 3
    Dernier message: 14/12/2002, 02h52
  2. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43
  3. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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