C # Положение мыши над картинкой - PullRequest
3 голосов
/ 22 ноября 2011

Как узнать, в каком пикселе pictureBox находится мышь (координаты)?

Ответы [ 4 ]

7 голосов
/ 22 ноября 2011

Поймать событие перемещения мыши:

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
    {
        Text = String.Format("X: {0}; Y: {1}", e.X, e.Y);
    }

У вас там позиции X и Y.
Если ваше изображение было увеличено и / или панорамировано, помните, что вы должны применить преобразования к этим координатам.1005 * Для ясности: если ваше изображение было размещено на (x0,y0) и увеличено с помощью zf (помните, что zf <1 означает уменьшение), координаты пикселей будут </p>

px = (e.X - x0) / zoom;
py = (e.Y - y0) / zoom;
4 голосов
/ 22 ноября 2011

Я думаю, что вопрос немного расплывчатый, поскольку вы не сказали нам, что именно вы планируете делать или что вы эффективно пытались.

Control.PointToClient методкажется, делает то, что вам нужно:

Вычисляет местоположение указанной точки экрана в координатах клиента.

Затем можно использовать Bitmap.GetPixel и использовать координаты XY, чтобы получить пиксель при заданных координатах мыши:

Получает цвет указанного пикселя в этом растровом изображении

Все это можетбыть вызванным событием Mouse_Over, Mouse_Click и т. д.

2 голосов
/ 22 ноября 2011

Если вы определите цвет внутри 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 голос
/ 22 ноября 2011

В классе Mouse есть статический метод, который позволяет получить позицию указателя мыши относительно другого элемента. Посмотрите на Mouse.GetPosition (UIElement) .

Вот как вы его используете.

Point point = Mouse.GetPosition(pictureBox);

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