Buffer + Timage = Lenteur??

Résolu
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005 - 24 janv. 2005 à 08:05
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005 - 24 janv. 2005 à 17:33
Salut,

j'utilise un buffer Tbitmap pour dessiner sur un Timage, mais le rafraichissement n'est pas assez rapide :

Au premier clic, je stocke les coordonnées de mon point de départ.
OnMouseMove : j'efface le buffer, je dessine la ligne de mon point de départ jusqu'à la position du curseur de la souris, puis je copie le buffer dans mon Timage. Image1.draw(0,0,buffer);

et au deuxième clic je trace mon trait final.

Mon probleme est que le rafraichissement n'est pas assez rapide, ca fait comme la trainée du curseur dans windows ..C'est du au tracé du buffer sur le Timage.

quelqu'un a til une idée pour palier ce probleme?

4 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
24 janv. 2005 à 12:01
Deux idées :

1 - Prendre un tout petit bitmap pour que l'effacement et la copie ne soient pas trop longs

2 - Utiliser une méthode plus adaptée pour tracer cette ligne :
utilisation du mode pmXor du TPen du canvas de l'image. Cette méthode
permet de tracer une ligne en inversant les pixels existant sur le
fond. L'opérateur XOR a ceci de sympa : l'appliquer deux fois (de la
même façon) revient à ne rien faire. Donc au lieu d'effacer un buffer
grand comme l'image + dessiner un ligne + copier le buffer sur l'image,
on se simplifie la vie en effaçant, si elle existe, la ligne tracée
précédemment et en traçant la nouvelle.



Ken@vo

____________________

Code, Code, Codec !
3
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005
24 janv. 2005 à 14:10
Merci Kenavo,
Par contre je compends pas très bien;

Mon buffer est de couleur définie comme etant la couleur de transparence du Tbitmap. Si je dessine directement sur le canvas du Timage, le fond devient blanc et je n'ai plus la transparence (raison pour laquelle je passe par le buffer Tbitmap).

Admettons que j'aie un rectange bleu, et que je veuille tracer une ligne rouge: je clic une première fois, ensuite quand je bouge, la ligne suit mon curseur donc en fait la ligne n'apparaitra pas de la couleur rouge, mais inverse a la couleur transparente si je comprends bien?

Je veux travailler avec des masques, c'est a dire que l'on puisse afficher plusieurs niveau de dessins, sachant que un seul peut etre modifié. Est ce qu'un Tpaintbox me permet de stocker une image en arrière plan, de dessiner sur un Canvas et de faire le XOR comme ceci : Pendant le mouvement, ma ligne apparait de la couleur sélectionnée sauf quand on survole un objet existant, où le segment comment aux deux objets apparait en couleur inverse?

Je suis pas sur de bien m'expliquer désolé

Merci pour vos réponses.
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
24 janv. 2005 à 16:57
Ah oui, le tableau d'enregistrements avec un bitmap, c'étati toi !



En gros, c'est un système de calques que tu veux ? Avec sur chacun une ou plusieurs lignes, c'est ça ?



Ken@vo

____________________

Code, Code, Codec !
0
cs_TkILLA Messages postés 31 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 16 mars 2005
24 janv. 2005 à 17:33
Oui. Les calques servent uniquement a afficher le dessin des personnes qui seront connectées ( un calqu par personne) : ils seront donc en transparence, affichés ou non.

L'utilisateur pourra tracer ses lignes et rectangles sur son prope calque sui sera affiché chez les connectés.

Actuellement, j'ai un Timage de fond qui contient une image d'origine, sur lequel j'ai un autre Timage qui constitue le calque de dessin de l'utilisateur. Ensuite s'ajoutent les calques des différents utilisateurs connectés. Donc tous les calques sont transparents.

Moi, pour dessiner, j'utilisais la methode du Tbitmap pour la transparence. Le seul hic c'est que c'est pas rapide du tout.

Donc je me demande si j'utilise un Tpaintbox avec comme picture mon image de départ, et je dessine sur le canvas. Dans ce cas, les calques des utilisateurs seront par dessus mon Paintbox.

Est ce que dessiner sur le canvas d'un Tpaintbox cache l'image? Et est ce que ca sera plus rapide?
0
Rejoignez-nous