web-dev-qa-db-fra.com

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 les mêmes fonctionnalités. Quand dois-je utiliser un QImage et quand dois-je utiliser un QPixmap?

68
Mr.Tu

Répondez facilement en lisant les documents sur QImage et QPixmap :

La classe QPixmap est une représentation d'image hors écran qui peut être utilisée comme périphérique Paint.

La classe QImage 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, d'après la réponse de @ Dave:

Vous ne pouvez pas manipuler un QPixmap en dehors du thread GUI, 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, de la modifier, de changer des pixels dessus, etc., utilisez un QImage.
  • Si vous prévoyez de dessiner la même image plusieurs fois sur l'écran, convertissez-la en QPixmap.
46
karlphillip

Il y a une belle série d'articles sur 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, de la modifier, de changer des pixels dessus, etc., utilisez un QImage.
  • Si vous prévoyez de dessiner plusieurs fois la même image à l'écran, convertissez-la en QPixmap.
40
Arnold Spence

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 retransmises au thread GUI.

32
Dave Mateer

Important dans les environnements industriels:

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 qui fait l'affichage, c'est très important en termes d'utilisation du réseau.

Avec un Pixmap, un Redraw consiste à envoyer uniquement l'ordre de redessiner (quelques octets) sur le réseau.

Avec un QImage, cela consiste à envoyer l'image entière (environ quelques Mo).

17
iksess
  • QPixmap est un "objet image" dont la représentation pixel est sans conséquence dans votre code, ainsi QPixmap est conçu et optimisé pour le rendu d'images sur l'écran d'affichage, il est stocké sur le XServer lors de l'utilisation de X11, donc dessiner QPixmap sur XWindow est beaucoup plus rapide que dessiner QImages, car les données sont déjà sur le serveur, et prêt à l'emploi.

    Quand utiliser QPixmap: Si vous voulez juste dessiner une image existante (icône .. arrière-plan .. etc) surtout à plusieurs reprises, alors utilisez QPixmap.

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

    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 une pixmap monochrome (profondeur de 1 bit). Tout comme QPixmap, QBitmap est optimisé pour l'utilisation du partage de données implicite.

  • QPicture est un appareil Paint qui enregistre et rejoue les commandes QPainter - votre dessin -
12
Mohammad Kanan