Quelle est la différence entre QImage et QPixmap?

Je ne comprends pas quelle est la différence entre QImage et QPixmap, ils semblent offrir la même fonctionnalité. Quand devrais-je utiliser un QImage et quand devrais-je utiliser un QPixmap?

60
demandé sur Aquarius_Girl 2012-04-25 04:30:51

5 réponses

Easilly a répondu en lisant les documents sur QImage et QPixmap:

La classe QPixmap est une représentation d'imagehors écran qui peut être utilisée comme périphérique de peinture.

La classeQImage fournit une représentation d'image indépendante du matériel qui permet un accès direct aux données de pixels et peut être utilisée comme périphérique paint.

Edit: aussi, de la réponse de @Dave:

Vous ne pouvez pas manipuler un QPixmap en dehors du gui-thread, mais QImage n'a pas une telle restriction.

Et de @ Arnold:

Voici un bref résumé qui s'applique généralement (pas toujours):

  • Si vous prévoyez de manipuler une image, Modifiez-la, changez de pixels dessus, etc., utilisez un QImage.
  • Si vous prévoyez de dessiner la même image plus d'une fois sur l'écran, convertissez-le en QPixmap.
40
répondu karlphillip 2014-12-10 15:47:09

Il y a une belle série d'articles à Qt Labs qui explique beaucoup de choses sur le système graphique Qt. Cet article, en particulier, a une section sur QImage vs QPixmap.

Voici un bref résumé qui s'applique généralement (pas toujours):

  • Si vous prévoyez de manipuler une image, Modifiez-la, changez de pixels dessus, etc., utilisez un QImage.
  • Si vous prévoyez de dessiner la même image plus d'une fois sur l'écran, convertissez-la en QPixmap.
34
répondu Arnold Spence 2017-03-21 02:58:53

Une différence importante est que vous ne pouvez pas créer ou manipuler un QPixmap sur autre chose que le thread GUI principal. Vous pouvez cependant créer et manipuler des instances QImage sur les threads d'arrière-plan, puis les convertir après les avoir renvoyées au thread GUI.

30
répondu Dave Mateer 2012-04-25 12:22:09

Important dans l'environnement industriel:

Le QPixmap est stocké sur la carte vidéo faisant l'affichage. Pas le QImage.

Donc, si vous avez un serveur exécutant l'application et une station cliente effectuant l'affichage, cela est très important en termes d'utilisation du réseau.

Avec un Pixmap, un redessin consiste à envoyer sur le réseau uniquement l'ordre de redessiner (quelques octets). Il consiste à envoyer l'image entière avec un QImage (quelques Mo ? ...)

13
répondu iksess 2013-06-06 08:48:17
  • QPixmap est un "objet image" dont la représentation pixel n'a aucune conséquence dans votre code, donc QPixmap est conçu et optimisé pour le rendu des images sur l'écran d'affichage, il est stocké sur le XServer lors de L'utilisation de X11, ainsi dessiner QPixmap sur XWindow est beaucoup plus rapide que dessiner QImages,

    Quand utiliser QPixmap: Si vous voulez juste pour dessiner une image existante (icône .. fond .. etc) en particulier à plusieurs reprises, puis utilisez QPixmap.

  • QImage est un " tableau de pixels en mémoire "du code client , QImage est conçu et optimisé pour les E / S, et pour l'accès direct aux pixels et la manipulation.

    Quand utiliser QImage : Si vous voulez dessiner, avec Qpaint, ou manipuler une image en pixels.

  • QBitmap est seulement une sous-classe qpixmap pratique assurant une profondeur de 1, c'est un pixmap monochrome (profondeur de 1 bit). Tout comme QPixmap , QBitmap est optimisé pour l'utilisation du partage de données implicite.

  • QPicture {[5] } est un périphérique de peinture qui enregistre et rejoue les commandes QPainter -- votre dessin --
2
répondu Mohammad Kanan 2018-08-04 09:29:11