2009-05-13 7 views
5

Voglio disegnare un dib su un HDC, la stessa dimensione. Sto usando: des e src sono della stessa dimensione.StretchDIBits sembra lento, c'è qualche API più veloce?

::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); 

ma trovo che è lento, perché la dimensione des è la stessa, ho solo bisogno di copiare il dib su un dc. Esiste un metodo più veloce di StretchDIBits?

altrettanto

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

Solo per curiosità, qual è il tipo di m_pImg? – Pumkko

risposta

8

La differenza di velocità viene dal fare qualsiasi conversione del colore necessaria in aggiunta alla generalità necessarie per gestire l'allungamento (anche se la dimensione di destinazione è lo stesso del vostro formato sorgente).

Se stai disegnando l'immagine solo una volta, allora penso che la funzione che stai cercando sia SetDIBitsToDevice.

Se si preoccupa della velocità poiché si disegna più volte lo stesso DIB, è possibile migliorare le prestazioni copiando il DIB in un DC di memoria compatibile una volta, quindi BitBlt -ing dalla memoria CC allo schermo (o stampante) ogni volta che ne hai bisogno. Utilizzare CreateCompatibleDC per creare la memoria DC, quindi utilizzare StretchDIBits o SetDIBitsToDevice per ottenere l'immagine su di essa. Successivamente, è possibile utilizzare direttamente BitBlt. Si potrebbe anche esaminare l'utilizzo di DIBSECTION, che offre un compromesso in termini di prestazioni tra un DIB reale e un DC compatibile.