2009-05-13 5 views
5

Je veux dessiner un dib sur un HDC, de la même taille. J'utilise: des et src sont de la même taille.StretchDIBits semble lent, y at-il une API plus rapide?

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

mais je trouve qu'il est lent, parce que la taille des est le même, j'ai juste besoin de copier la DIB sur un courant continu. Y at-il une méthode plus rapide que StretchDIBits?

comme

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

Juste pour la curiosité, quel est le type de m_pImg? – Pumkko

Répondre

8

La différence de vitesse vient de faire une conversion de couleur nécessaire, en plus de la généralité nécessaire pour gérer l'étirement (même si votre taille cible est la même que la taille de votre source).

Si vous dessinez simplement l'image une seule fois, alors je pense que la fonction que vous recherchez est SetDIBitsToDevice. Si vous vous souciez de la vitesse car vous dessinez la même DIB plusieurs fois, vous pouvez améliorer les performances en copiant une fois la DIB dans une mémoire compatible DC, puis BitBlt depuis la mémoire CC vers l'écran (ou une imprimante) chaque fois que vous en avez besoin. Utilisez CreateCompatibleDC pour créer la mémoire DC, puis utilisez StretchDIBits ou SetDIBitsToDevice pour obtenir l'image dessus. Après cela, vous pouvez utiliser BitBlt directement. Vous pouvez également regarder en utilisant un DIBSECTION, ce qui donne un compromis dans les performances entre un vrai DIB et un DC compatible.

Questions connexes