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

Discussion :

[QImage] accéder et reconstruire le buffer de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 61
    Par défaut [QImage] accéder et reconstruire le buffer de données
    Je me lance dans un projet d'ampleur de traitement d'image.
    Je souhaite réaliser un programme de traitement d'image entièrement basé sur Qt.

    Pour le moment je tente (en vint!) de récupérer le buffer et de construire une autre QImage a partir de ce même buffer et ce le plus rapidement possible.

    Récupérer le buffer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QImage image(name);
     
    format = image.format();
    allocation(image.height(), image.width());// a partir des dimmension de l'image je créer le m_pucPixel
    unsigned char* data = image.bits();
    memcpy(m_pucPixel, data, getNbPixels());
    Recréer un QImage a partir du buffer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsigned char *buffer = new unsigned char[getNbPixels()];
    memcpy(buffer,m_pucPixel,getNbPixels());
    QImage image(buffer, getLargeur(), getHauteur(), format);
    if(image.save(name))
        return true;
    else
        return false;

    L'image sauvegardé n'est pas exploitable,(erreur de lecture de la part de windows, fichier corrompu). Je pense qu'il y a des erreur au niveau du format mais je ne comprends pas comment Qt les gère.

    Merci pour tout aide.

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Si le but c'est juste de copier un QImage, passe par les constructeurs de copie de QImage, ils s'en sortent très bien.

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Pour ton projet de traitement d'image,
    regarde
    http://api.kde.org/kdesupport-api/kd...ageblitz/html/

    sinon, memcpy... à éviter, il y as std::copy beaucoup plus intéressant.
    Il faut savoir que la taille mémoire d'une ligne d'une QImage est aligné en sur 32 bits.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 61
    Par défaut
    Salut,

    Si le but c'est juste de copier un QImage, passe par les constructeurs de copie de QImage, ils s'en sortent très bien.
    Non je souhaite accéder au buffer et appliquer les traitement que je veut directement dessus.

    Il faut savoir que la taille mémoire d'une ligne d'une QImage est aligné en sur 32 bits.
    Oui j'ai vue cette histoire de 32 bits, mais je ne comprends pas du tout de quoi il retourne précisément et quelle conséquences directe dans la manipulation et la reconstruction du buffer. Je regarderai plus précisément le lien que tu m'a passer plus tard.

    Sinon j'ai réussi à copier est reconstruire le buffer.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    juste que la taille mémoire d'une ligne est sur 32 bits.
    Suivant le format du pixel, il peut y avoir de la mémoire alloué en plus qui n'ets utilisé pour chaque ligne.
    exemple
    une QImage 8bit par pixel dont les lignes fait 5 pixel
    sa taille ne sera pas 5*8 mais 8*8. Il y as 3 byte de plus par ligne non utilisé.

Discussions similaires

  1. [AC-2007] Accéder à des tables pour extraction de données
    Par leriderfoudu77 dans le forum Access
    Réponses: 2
    Dernier message: 30/09/2009, 09h58
  2. [MySQL] Reconstruire une base de données
    Par Interface dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/08/2009, 13h52
  3. [MySQL] Comment accéder avec php à une base de données ne se trouvant pas sur le même domaine
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 25/02/2008, 18h16
  4. buffer de données
    Par contremaitre dans le forum C
    Réponses: 8
    Dernier message: 29/01/2008, 17h41
  5. Comment accéder aux composants du module de données distant ?
    Par bds2006 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/06/2006, 00h47

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