effacement image

effacement image - C++ - Programmation

Marsh Posté le 31-08-2009 à 09:04:37    

Bonjour à tous. J'utilise Borland CBuilder6 dans des applis graphiques. Pour effacer une image j'utilise la méthode classique de la création d'un rectangle plein noir. Ce procédé crée un blinking assez désagréable, j'aimerais connaître une méthode plus astucieuse permettant de passer d'une image à une autre sans cette "saute" visuelle.

Reply

Marsh Posté le 31-08-2009 à 09:04:37   

Reply

Marsh Posté le 31-08-2009 à 11:45:58    

Si on pouvait voir un petit bout de code, cela nous aiderait pour vous aider.
 
Je suppose que pour afficher une image, vous devez faire un BitBlt, ou quelque chose d'équivalent. Or cette fonction a des options qui permettent d'indiquer si on veut faire un ou booléen ou un et booléen ou d'autres opérations booléennes entre les pixels de l'image précédente et les pixels de la nouvelle image. Il suffirait de prend l'option qui permet d'afficher la nouvelle image sans prendre en compte les pixels de l'ancienne image. Théoriquement, c'est l'option par défaut. C'est pour cela que je ne comprends pas bien l'utilité du rectangle noir.
 
Si la nouvelle image est plus petite que l'ancienne image, il peut y avoir des parties de l'ancienne image qui débordent, et dans ce cas, il faut les effacer en affichant un rectange à la place de ces parties. Il doit être possible de connaitre les dimensions des deux images, et de calculer la taille exacte des parties qui débordent, et donc de ne peindre qu'un ou deux rectangles pour couvrir ces parties.

Reply

Marsh Posté le 31-08-2009 à 12:25:54    

Merci pr votre réponse. J'utilise en fait des fonctions du type LineTo (x,y) ....

Reply

Marsh Posté le 31-08-2009 à 13:34:11    

Alors deux solutions :
 
1. Faire les LineTo dans un bitmap en mémoire, et copier ce bitmap sur l'écran par un BitBlt. C'est un chouia compliqué quand on ne l'a jamais fait et qu'on n'a pas d'exemple car il faut créer le bitmap en mémoire et le libérer à la fin, et avant de créer ce bitmap, il faut se créer un display context en mémoire, et le libérer à la fin.
 
2. Au lieu de peindre un rectangle noir, peindre juste une ligne noire sur chaque ligne peinte précédemment.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed