在 c# winform 中的图像像素之间移动十字光标

Move cross cursor between image pixels in c# winform

我有一个应用程序可以将图像加载到 pictureBox 中并提供十字光标所在位置的 RGB 值,我可以在 picturebox 中将光标移动到多个方向 space。相反,我想移动到图像像素 space,所以如果我放大或缩小,我想将光标从一个像素跳到另一个像素。

任何想法,我每次缩放时都需要获取图像的 PixelHeight 和 PixelWidth 吗? Stride 是如何计算有多少像素的?

更改 Cursor.Position 很简单,但会干扰实际移动鼠标。

你可以试试这个:

  • 进入图片框时隐藏真实的鼠标光标
  • 四处移动时在绘画事件中画一个十字
  • 离开时再次显示光标

这是一个例子:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    pictureBox1.Invalidate();
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Point mouse = pictureBox1.PointToClient(Cursor.Position);
    float zoom = 1f * pictureBox1.ClientRectangle.Width / pictureBox1.Image.Width;
    int pixelWidth = (int)Math.Round(zoom);

    int x = mouse.X / pixelWidth * pixelWidth;
    int y = mouse.Y / pixelWidth * pixelWidth;

    if (pictureBox1.ClientRectangle.Contains(mouse))
    {
        e.Graphics.DrawLine(Pens.White, x, y - 4, x, y + 4);
        e.Graphics.DrawLine(Pens.White, x - 4, y, x + 4, y);
    }
}

private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
    Cursor.Hide();
}

private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
    Cursor.Show();
    pictureBox1.Invalidate();  // clear the last one!
}

当然你只需要在加载或调整图像大小时计算像素宽度。为了清楚起见,我将其保留在原位。