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

Qt Discussion :

Afficher un image dynamiquement pixel par pixel


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut Afficher un image dynamiquement pixel par pixel
    Bonjour à tous,

    Voilà j'essaye d'utiliser Qt pour faire une simple form affichant une image, puis lancer un traitement sur l'image assez long pendant lequel je veux afficher les résultats en modifiant les pixels un à un à chaque fois que le traitement de l'image l'a calculé.

    Cela me permet de "debugger" mon algorithme. Le côté "temps réel" (bien que ce n'en soit pas vraiment au sens strict) est trés important car je veux voir la dynamique du calcul.

    Je m'y perd un peu entre les différents moyen d'afficher une image (bitmap dans un label, QtPainter, BlitMapping, double buffering, ...) quel est le meilleur moyen pour éviter le flicking étant donné mes besoins ?

    Merci.

  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,

    Tu n'auras pas à souffrir de flicking; Qt4+ (quoique tu n'as pas spécifié ta version, c'est laquelle?) offre un mécanisme de double buffering par défaut sur la majorité des plateformes.

    Je me sers de QLabel+QPixmap pour les images fixes, ce qui n'est pas ton cas donc
    QPixmap est optimisé pour l'affichage, alors que QImage est optimisé pour le traitement. Quoiqu'il arrive, tu devras créer donc 2 QImage: le courant et le support de travail, ensuite tu en fais un QPixmap pour affichage.
    Selon la taille et les fonctions à supporter, je te conseillerais de créer un widget personnalisé dérivant de QAbstractScrollArea (suggestion seulement )

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Merci pour la réponse.

    Je vais suivre tes conseils. Pour le QImage, comment je peux faire pour modifier un pixel à la fois ? Je passe par un QPainter (ce le seul objet Qt que j'ai trouvé qui à une méthode DrawPoint) ? Ou est-ce que je peux avoir directement accès aux pixels par un pointeur sur une zone mémoire ?

  4. #4
    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
    QImage::pixel() et QImage::setPixel(). Tu peux éviter le QPainter pour ces opérations

    Tu as aussi QImage::bits() qui correspondra probablement plus à ce que tu cherches?

  5. #5
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    setPixel() me va trés bien. Je vais m'orienter vers cette solution simple.

    Un début de piste pour l'enchainement des refresh entre :

    QImage (buffer) -> QImage (courant) -> QPixmap (conversion) -> QLabel ?

    C'est à dire qu'elles méthodes je dois choisir étant donné mon pb. (il y en à tellement) ?

    Plus ça va, plus je me demande si c'est pas un peu lourd comme châine de traitement, alors que je ne change qu'un pixel à la fois ! (On ne peut pas dessiner directement sur le Canvas, pour un pixel ?)

  6. #6
    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
    Citation Envoyé par mchk0123
    (On ne peut pas dessiner directement sur le Canvas, pour un pixel ?)
    Euh, là, t'en as pas assez dit alors
    Si tu parles de QCanvas, tu es sous Qt3, ça peut changer des choses (comme le problème du double buffering précisé dans le 1er post). De plus si tu utilises un QCanvas, tu n'as pas besoin d'un QLabel, mais soit d'une classe dérivant de QCanvasItem.

    Alors, quelle est ta situation exacte?

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

Discussions similaires

  1. [Débutante] Moyenner des images pixel par pixel
    Par Krokro00 dans le forum Images
    Réponses: 7
    Dernier message: 31/05/2007, 15h49
  2. Image a remplir Pixel par Pixel, Quel objet utiliser ?
    Par ZbergK dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 28/02/2007, 21h35
  3. Lecture de fichiers images pixels par pixels
    Par FabHacker dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2005, 16h12
  4. [ImageMagick] Parcourir une image pixel par pixel
    Par kip dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/10/2005, 14h10
  5. [VB6] [Graphisme] Transfert d'image pixel par pixel
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 15/10/2002, 09h53

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