2016-07-15 1 views
1

Я нахожусь на Wpf, и у меня есть список координат, где я рисую их на растровом изображении. Мой файл растрового изображения 1000 * 1000, и он заполняется в 680 * 440 Image control. Теперь то, что я пытаюсь сделать, - выделить координаты, которые находятся рядом с курсором мыши, когда мышь обнимает мое изображение.Как получить положение координаты относительно позиции мыши?

на MouseMove() обработчик событий, я называю эту функцию и передать ей свою позицию мыши относительно контроля изображения:

public void HighLightNearbyDots(Point MousePosition) 
{ 
    int Distance; 
    CoordPoint temp = new CoordPoint(); 
    temp.X = MousePosition.X; 
    temp.Y = MousePosition.Y; 

    foreach (var point in myDisplayedCoords) 
    { 
     Distance = (int)(temp - point); // using subtraction operator that I wrote 

     if (Distance < 10) 
     { 
      point.Color = Colors.Blue; 
     } 
     else 
     { 
      point.Color = InitialCoordColor; // Aqua 
     } 
    } 

    DrawImage(); 
} 

Да перерисовывать мой образ при каждом вызове, чтобы отразить изменения. Может быть, проблема в том, что мне нужно масштабировать или рассчитать некоторое соотношение между размером файла 1000 * 1000 и размером управления 680 * 440, чтобы достичь точного пикселя. Но я не уверен, в чем проблема. Ниже приведен текущий результат, который убивает меня с утра. Может ли кто-нибудь помочь мне подойти к этому?

enter image description here

ответ

0

Основываясь на этом How to scale a coordinate system? Теперь мы знаем, уравнение. Затем я использую это так:

int Distance; 
CoordPoint temp = new CoordPoint(); 
temp.X = MousePosition.X/660 * Bitmap.Width; 
temp.Y = Bitmap.Height - (MousePosition.Y/440 * Bitmap.Height); // y is flipped 

enter image description here