2009-05-13 9 views
5

Quiero dibujar un dib en un HDC, del mismo tamaño. Estoy usando: des y src son del mismo tamaño.StretchDIBits parece lento, ¿Hay alguna API más rápido?

::StretchDIBits(hdc, 
       des.left,des.top,des.right - des.left,des.bottom - des.top, 
       src.left, GetHeight() - src.bottom, src.right - src.left,src.bottom - src.top, 
       m_pImg->accessPixels(),m_pImg->getInfo(), DIB_RGB_COLORS, SRCCOPY); 

pero me parece que es lento, debido a que el tamaño de des es el mismo, sólo hay que copiar el DIB en una corriente continua. ¿Hay algún método más rápido que StretchDIBits?

tan

StretchBlt (slow) vs Bitblt.(faster) 
StretchDIBits (slow) vs ?(faster) 
+0

Solo por curiosidad, ¿cuál es el tipo de m_pImg? – Pumkko

Respuesta

8

La diferencia de velocidad viene de hacer ninguna conversión de color necesaria, además de las disposiciones generales necesarias para manejar el estiramiento (incluso si su tamaño objetivo es el mismo que el tamaño de la fuente).

Si solo dibuja la imagen una sola vez, creo que la función que está buscando es SetDIBitsToDevice.

Si le importa la velocidad porque está dibujando el mismo DIB varias veces, entonces puede mejorar el rendimiento copiando el DIB en una memoria compatible DC una vez, y luego BitBlt -ing desde la memoria DC a la pantalla (o impresora) cada vez que lo necesite. Use CreateCompatibleDC para crear la memoria DC, y luego use StretchDIBits o SetDIBitsToDevice para obtener la imagen en ella. Después de eso, puede usar BitBlt directamente. También podría considerar el uso de DIBSECTION, que da un compromiso en el rendimiento entre un DIB verdadero y un DC compatible.

Cuestiones relacionadas