2009-07-09 7 views
0

J'utilise C++ GDI, StretchDIBits pour dessiner des images sur DC. Parce que l'image d'origine est grande et de haute qualité est nécessaire. J'utilise le mode HAFTONE, pour dessiner l'image entière sur DC (zoom sur l'image) semble temps comsuming. Je décide donc de dessiner partiellement en utilisant StretchDIBits. Mais il existe un problème sérieux concernant StretchDIBits.Image tremblant quand StretchDIBits partiellement

je ne peux tirer rect en nombres entiers à une région en nombres entiers (la largeur et la hauteur, et point supérieur gauche de x, y sont tous les entiers)

::SetStretchBltMode(hdc, HALFTONE); 
    ::StretchDIBits(hdc, 
     realDrawRect.left, 
     realDrawRect.top, 
     realDrawRect.right - realDrawRect.left, 
     realDrawRect.bottom - realDrawRect.top, 
     left, 
     top, 
     width, 
     height, 
     pImageDIB, 
     pImageHead, 
     DIB_RGB_COLORS, SRCCOPY); 

si, l'image est 21 * 21. Je dessine maintenant (5, 5, 7, 7) à DC, à (20, 20, 60,60), la prochaine fois que je veux dessiner à (21, 20, 61, 60). il n'y a pas d'emplacement correspondant à l'image originale. Je ne peux donc dessiner qu'une approximation rectale au DC. Maintenant le problème arrive, l'image est en train de trembler !!

Je suis ennuyé par ce problème. Comment éviter les secousses?

Répondre

0

Si la secousse vient d'arrondir l'entier, essayez de l'arrondir à l'entier le plus proche. Voir this. Sinon, je vous recommande de passer à GDI +, ce qui est beaucoup plus facile de travailler avec. Avec GDI +, vous pouvez dessiner un bitmap avec une précision en virgule flottante. Voir la documentation Graphics::DrawImage. Je suis passé de GDI à GDI + dans quelques projets MFC Active-X et ce n'est pas dur du tout.

Questions connexes