2012-01-09 10 views
8

Estoy desarrollando un programa que debe calcular un color de cada punto en una imagen de 1024x1024 usando un algoritmo especial. El color de un punto representa algún valor. Entonces cada punto es independiente de otros puntos y debe dibujarse por separado. No tengo que actualizar la imagen con demasiada frecuencia. En realidad, necesito mostrarlo solo una vez.Qt. La manera más rápida de dibujar 1024x1024 puntos en la pantalla

¿Cuál es el enfoque más rápido para dibujar píxeles separados en Qt?

¿Puedo obtener algún tipo de "memoria de pantalla" y escribir toda la imagen como una matriz de conjuntos de 4 bytes, representando cada píxel como 4 bytes en esa memoria?

Respuesta

7

La clase QImage está optimizada para la manipulación de píxeles. Puede instanciar uno con el tamaño requerido y luego establecer los píxeles individualmente setPixel, o acceder a los datos brutos y manipularlos en su lugar a través del bits(). Solo asegúrate de usar el formato correcto (por ejemplo, valores RGBA o índices de color para imágenes de 8 bits)

6

La solución más rápida puede ser crear un QImage, manipularlo (establecer los píxeles) y luego obtener Qt para dibujarlo.

La clase QImage es para una rápida IO, desde el manual:

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

La clase QImage admite varios formatos de imagen descritos por Formato enum. Estas incluyen imágenes monocromas, de 8 bits, de 32 bits y alfa mezcladas, que están disponibles en todas las versiones de Qt 4.x.

Hay información sobre la manipulación de píxeles en la sección Descripción detallada.

Mostrarlo de la manera más simple sería convertirlo en un mapa de píxeles con QPixmap::fromImage y ponerlo en una etiqueta con QLabel::setPixmap.

Para un mayor control, usted podría subclase QWidget, sobrecargar el paintEvent, y dibujar el QImage con un QPainter con QPainter::drawImage.

+0

Repainting QImage en cada evento de pintura puede ser bastante costoso dependiendo de la plataforma, así que mejor conviértete en QPixmap antes de pintar y guardar en caché ese mapa de pixeles –

+0

Frank, ¡Gracias! – pavelkolodin

+1

Wow, QImage me permitió dibujar mi imagen casi al instante, tengo un gran FPS (-; – pavelkolodin

Cuestiones relacionadas