example c++ qt qimage qpixmap

c++ - qpixmap example



¿Cuál es la diferencia entre QImage y QPixmap? (5)

No entiendo cuál es la diferencia entre QImage y QPixmap, parecen ofrecer la misma funcionalidad. ¿Cuándo debería usar QImage y cuándo debería usar QPixmap?


Easilly respondió leyendo los documentos sobre QImage y QPixmap :

La clase QPixmap es una representación de imagen fuera de la pantalla que se puede usar como un dispositivo de pintura.

La clase QImage proporciona una representación de imagen independiente del hardware que permite el acceso directo a los datos de píxeles, y se puede utilizar como un dispositivo de pintura.

Editar: También, desde la respuesta de @ Dave:

No puede manipular un QPixmap fuera del subproceso GUI, pero QImage no tiene tal restricción.

Y de @Arnold:

Aquí hay un breve resumen que generalmente (no siempre) se aplica:

  • Si planea manipular una imagen, modificarla, cambiar píxeles en ella, etc., use una QImage.
  • Si planea dibujar la misma imagen más de una vez en la pantalla, conviértala en un QPixmap.

Importante en el entorno industrial:

El QPixmap se almacena en la tarjeta de video que muestra la pantalla. No es la QImage.

Por lo tanto, si tiene un servidor ejecutando la aplicación y una estación cliente haciendo la visualización, es muy significativo en términos de uso de la red.

Con un Pixmap, un Redraw consiste en enviar a través de la red solo el orden para volver a dibujar (unos pocos octetos). Consiste en enviar toda la imagen con un QImage (unos pocos Mo? ...)


Una diferencia importante es que no puede crear o manipular un QPixmap en nada que no sea el hilo principal de la GUI. Sin embargo, puede crear y manipular instancias de QImage en subprocesos de fondo y luego convertirlos luego de volverlos a pasar al subproceso de GUI.


Hay una buena serie de artículos en Qt Labs que explica mucho sobre el sistema de gráficos Qt. Este artículo en particular tiene una sección sobre QImage vs. QPixmap .

Aquí hay un breve resumen que generalmente (no siempre) se aplica:

  • Si planea manipular una imagen, modificarla, cambiar píxeles en ella, etc., use una QImage .
  • Si planea dibujar la misma imagen más de una vez en la pantalla, QPixmap un QPixmap .

  • QPixmap es un "objeto de imagen" cuya representación de pixel no tiene consecuencias en el código. Por lo tanto, QPixmap está diseñado y optimizado para mostrar imágenes en la pantalla, se almacena en el XServer cuando se usa X11, por lo que dibujar QPixmap en XWindow es mucho más rápido que dibujando QImages, ya que los datos ya están en el servidor y listos para usar.

Cuándo usar QPixmap : si solo desea dibujar una imagen existente (icono, fondo, etc.) especialmente repetidamente, utilice QPixmap.

  • QImage es una "matriz de píxeles en la memoria" del código del cliente , QImage está diseñado y optimizado para E / S, y para el acceso directo a los píxeles y la manipulación.

Cuándo usar QImage : si desea dibujar, con Qpaint, o manipular una imagen en píxeles.

  • QBitmap es solo una conveniente subclase QPixmap que garantiza una profundidad de 1, es un mapa de píxeles monocromático (profundidad de 1 bit). Al igual que QPixmap, QBitmap está optimizado para el uso compartido de datos implícitos.
  • QPicture es un dispositivo de pintura que graba y reproduce comandos de QPainter, su dibujo,