Scintillement

blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005 - 13 oct. 2004 à 14:57
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005 - 13 oct. 2004 à 22:14
Bonjour,

je suis obliger de dessiner sur ma feuille toutes les 5 ms environ, mais le tracé scintille. Comment puis - je faire pour qu'il n'y ai pas de scintillement ?

Merci d'avance

bLiNkSeB - Anciennement sebastienbro

4 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 oct. 2004 à 17:50
Déjà, toute les 5ms c'est beaucoup (200 fois par seconde !!)

Sinon, il faut dessiner dans un contexte en mémoire et afficher le résultat final en 1 fois sans dessiner le fond avant.
Pour des détails d'impléméntation il faut indiquer l'environement, l'OS, les libs graphiques utilisées...
0
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
13 oct. 2004 à 19:07
En fait je dessine des trajectoires de planètesn et je dessine tous les points pour pouvoir obtenir une impression d'avancement. Je dessine aussi les planètes qui tourne autour du soleil et ces planètes (des cercles) scintille de temps en temps en tournant.

Je suis sous Windows, avec VC++ .NET 2003 et j'utilise Ellipse et SetPixels.

Mais ce n'est pas bien grave, le phénomène se produit rarement, et n'est pas génant, c'est seulement pour être pointilleux :)

Merci !

bLiNkSeB - Anciennement sebastienbro
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
13 oct. 2004 à 22:04
lors du dessin dans WM_PAINT, au lieu de dessiner dans le hdc donné par BeginPaint, créer un DC en mémoire et dessiner dedans :

PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
RECT rcClient;
GetClientRect(hWnd, &rc);

HDC hMemDC = CreateCompatibleDC(hdc);
HBITMAP hMemBmp = CreateCompatibleBitmap(hdc, rcClient.right, rcClient.bottom);
HBITMAP hOldBmp = (HBITMAP)SelectObject(hMemDC, hMemBmp);

FillRect(hMemDC, &rcClient, (HBRUSH)GetStockObject(WHITE_BRUSH);

// dessiner en utilisant hMemDC
....

// recopier à l'écran
BiBlt(hdc, 0, 0, rcClient.right, rcClient.bottom, hMemDC, 0, 0, SRCCOPY);

// libération
SelectObject(hMemDC, hOldBmp);
DeleteObject(hMemBmp);
DeleteDC(hMemDC);
EndPain(hWnd, &ps);
0
blinkseb Messages postés 57 Date d'inscription mercredi 25 août 2004 Statut Membre Dernière intervention 18 avril 2005
13 oct. 2004 à 22:14
Merci beaucoup ça marche impec !

bLiNkSeB - Anciennement sebastienbro
0
Rejoignez-nous