title: Get pixel value of image draw through onPaint methode
body: <p>I am developping a custom C# UserControl WinForm to display an image on background and display scrollbars when I zoom with the mouse. For this, I overrided the <code>OnPaint</code> method. In it, if I have an image loaded, according some parameters I know the source and destination rectangle sizes. In the same way, I know what scale and translation apply to always keeping the top left corner on screen when zooming. And for the zoom, I use the scrollmouse event to update the zoom factory.</p>
  <p>Here is my code related to this override method.</p>
  <pre><code>protected override void OnPaint(PaintEventArgs e)
  {
      base.OnPaint(e);
  
      // Draw image
      if(image != null)
      {
          // 
          Rectangle srcRect, destRect;
          Point pt = new Point((int)(hScrollBar1.Value/zoom), (int)(vScrollBar1.Value/zoom));
  
          if (canvasSize.Width * zoom &lt; viewRectWidth &amp;&amp; canvasSize.Height * zoom &lt; viewRectHeight)
              srcRect = new Rectangle(0, 0, canvasSize.Width, canvasSize.Height);  // view all image
          else if (canvasSize.Width * zoom &lt; viewRectWidth)
              srcRect = new Rectangle(0, pt.Y, canvasSize.Width, (int)(viewRectHeight / zoom));  // view a portion of image but center on width
          else if (canvasSize.Height * zoom &lt; viewRectHeight)
              srcRect = new Rectangle(pt.X, 0, (int)(viewRectWidth / zoom), canvasSize.Height);  // view a portion of image but center on height
          else
              srcRect = new Rectangle(pt, new Size((int)(viewRectWidth / zoom), (int)(viewRectHeight / zoom)));   // view a portion of image
      
          destRect = new Rectangle((int)(-srcRect.Width/2),
              (int)-srcRect.Height/2,
              srcRect.Width,
              srcRect.Height); // the center of apparent image is on origin
   
          Matrix mx = new Matrix(); // create an identity matrix
          mx.Scale(zoom, zoom); // zoom image
  
          // Move image to view window center
          mx.Translate(viewRectWidth / 2.0f, viewRectHeight / 2.0f, MatrixOrder.Append);
  
          // Display image on widget
          Graphics g = e.Graphics;
          g.InterpolationMode = interMode;
          g.Transform = mx;
          g.DrawImage(image, destRect, srcRect, GraphicsUnit.Pixel);
      }
  }
  </code></pre>
  <p>My question is how to get the pixel value when I am on the MouseMove override method of this WinForm ?</p>
  <p>I think understand that it is possible only in method with PaintEventArgs but I am not sure how to deal with it. I tried a lot of things but for now the better I got is use the mouse position on the screen and find the pixel value in the original bitmap with these &quot;wrong&quot; coordinates. I can't link this relative position on the screen with the real coordinates of the pixel of the image display at this place. Maybe there is method to &quot;just&quot; get the pixel value not passing through the image bitmap I use for the paint method ? Or maybe not.</p>
  <p>Thank you in advance for your help. Best regards.</p>