C# pictureBox 上的鼠标位置

5

如何知道鼠标位于pictureBox的哪个像素上(坐标)?


我不太确定你要找什么:是图片框中图片的像素信息吗?还是鼠标相对于图片框的位置?后者在这里有描述:链接 - okrumnow
例如,鼠标指向一个图片框的像素,其x坐标为10,y坐标为25,因此我想知道鼠标所在的像素的x和y坐标。 - NewProger
5个回答

8
捕捉鼠标移动事件:
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        Text = String.Format("X: {0}; Y: {1}", e.X, e.Y);
    }

您在这里有X和Y的位置。
如果您的图像已经被缩放和/或移动,请记住必须对这些坐标应用转换。
明确一点:如果您的图像已经放置在(x0,y0)并且使用zf进行了缩放(请记住,zf<1表示减小),像素坐标将会是

px = (e.X - x0) / zoom;
py = (e.Y - y0) / zoom;

@NewProger:我不知道你的评论是否是这个意思,所以请看一下我的编辑过的答案。 - Marco

4
我认为这个问题有点模糊,因为您没有告诉我们您计划做什么,也没有告诉我们您已经尝试了什么。
似乎Control.PointToClient方法可以做到您需要的:
将指定的屏幕点计算为客户端坐标。
然后,您可以使用Bitmap.GetPixel并使用X-Y坐标获取给定鼠标坐标处的像素:
获取此位图中指定像素的颜色。
所有这些都可以由Mouse_Over事件、Mouse_Click等触发。

谢谢npinti的PointToClient解决了我的问题。为了澄清问题:我正在计算:数字标签在Soduku网格(PictureBox)中掉落在哪一行/列上。DragDrop的DragEventArgs中的x/y是绝对坐标,我猜...而我需要相对于picturebox的x/y。 - corlettk

2
如果你需要在 MouseEvent 中确定颜色,你可以直接使用 MouseEventArgs 提供的坐标。
// Declare a Bitmap
Bitmap mybitmap;
// Load Picturebox image to bitmap
mybitmap = new Bitmap(pictureBox1.Image);

// In the mouse move event
 var pixelcolor = mybitmap.GetPixel(e.X, e.Y);
// Displays R  / G / B Color
pixelcolor.ToString()

1

Mouse类中有一个静态方法,允许您获取鼠标指针相对于另一个元素的位置。请查看Mouse.GetPosition(UIElement)

以下是使用方法。

Point point = Mouse.GetPosition(pictureBox);

Debug.WriteLine("X: " + point.X +"\n Y: "+ point.Y);

哦,但是我应该在using语句中添加什么?因为不知何故,“using System.Windows.Input;”会给我一个错误... - NewProger
好的,那正是我所做的 :) 但无论如何。我已经谷歌了一下,似乎在“窗体应用程序”中不可能使用,只能在W...叫什么来着.. WPF或者其他什么地方使用。 - NewProger
哦,是的。这是 WPF Presentationcore 库的一部分。我假设你想在一个 WPF 应用程序中完成这个操作。 - gprasant

0

您可以使用Curser.PositionPictureBoxPointToClient方法相结合,如this answer中所述。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接