Pregunta

Buenas noches,

Tengo varias imágenes de 32 bits en los buffers de memoria que deseo "blit" para un contexto de dispositivo, de forma rápida. La velocidad es un problema aquí porque el búfer se manipula constantemente y necesitan ser intercambiada a la DC en varias ocasiones.

La profundidad de color del tampón es de 32 bits, por lo que ya está en el formato DIB-esperado de SetDIBits (). Sin embargo, esto es bastante incómoda ya que el objetivo de mapa de bits de SetDIBits () no puede ser ya seleccionado en el DC antes de la operación. Así que voy a necesitar constantemente traspaso al archivo de mapa de bits de la DC, SetDIBits llamada (), intercambian la parte posterior de mapa de bits en el CC y, a continuación, blit la CC a CC de la ventana. Para mí, que apenas se parece como un montón de carga de trabajo de la CPU y el exceso de ramificación en la API de Windows; demasiado para un rendimiento óptimo.

Yo estaría interesado en el uso de DirectX si no me obligan a utilizar contextos de dispositivo para operaciones 2D o texturas de carga de los memoria de vídeo antes de mostrarlos, ya que el contenido de la imagen están en constante cambio.

Mi pregunta es simple (a pesar de la larga valoración crítica). ¿Cuál sería la forma más rápida para mí blit una imagen desde una memoria intermedia de píxeles en la memoria en la pantalla? acceso directo a la memoria intermedia de píxeles de un DC sería grande, pero sé que eso no va a ocurrir.

Gracias por leer mi larga valoración crítica.

¿Fue útil?

Solución

Hay un método de API CreateDIBSection para crear un DIB que las aplicaciones pueden escribir en forma directa. Esto permite actualizar continuamente el mapa de bits (ya sea memcopy o directamente escribir en él).

Véase el artículo de MSDN para obtener más detalles.

El acceso al mapa de bits debe estar sincronizada. Para ello, la llamada a la función GdiFlush.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top