Bonjour

Je me casse la tete a comprendre un truc qui ne marche pas comme je veux

Explication

Sur un PB j'ai des tas de point, images et trucs de couleurs
Si la souris passe sur certains objet durant la mouse move, j'affiche des infos dans un DGV et j'affiche un point sur le PB

Afin de ne pas perdre l'image sous ce point et ne pas devoir redessiner tout le PB, j'ai cru tres malin de prendre une micro copie d'écran à l'endroit ou je vais afficher le point avant son affichage et replacer cette copie quand la souris passe sur un autre centrte d'intéret

Ca semble marcher sauf que la recopie du buffer ne rend pas la meme image, il y a un decalage que je n'ai pas encore pu identifier.

Si qq voit l'erreur : BRAVO

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
// attributs de la form
    Point curAddrPoint = new Point(-1,-1);           // position reference
    static Image imgBuf = new Bitmap(10, 10);     // buffer image
    Graphics gBuf = Graphics.FromImage(imgBuf);  // Graphics associé au
buffer


Fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   if (idx>0)
  {
     // nous avons un point pa centre de l'objet intéressé
     Graphics cGraphics = pb_zoom.CreateGraphics();
     if (curAddrPoint.X > -1)  // on replace l'image sauvée
     {
       cGraphics.DrawImage(imgBuf, curAddrPoint.X - 5, curAddrPoint.Y - 5);
     }
 // on sauve un carré 10 x 10 dont pa est le centre
     Point P = new Point(pa.X - 5 , pa.Y - 5);
     Point P1 = this.PointToScreen(P);
 
     gBuf.CopyFromScreen(P1,new Point (0,0),new Size(10,10),CopyPixelOperation.SourceCopy);
 
     curAddrPoint = pa;  // on sauve pa pour coup suivant
// on affiche un point centré sur pa
     int X = pa.X;
     int Y = pa.Y;
     cGraphics.FillEllipse(semiTransBrushGreen, X - 5, Y - 5, 10, 10);
}