Как я могу рассчитать правильные координаты? - PullRequest
0 голосов
/ 10 ноября 2019

Мне нужна помощь. У меня есть Picturebox, и теперь я хотел бы рассчитать заданные координаты на картинке, а затем воспроизвести их в метке. Как я могу сделать это лучше всего?

Как видно на картинке. Если затем нажать на изображение, то данные будут введены в список.

Спасибо за помощь.

Моя картинка здесь: https://prnt.sc/puxyu6

1 Ответ

0 голосов
/ 10 ноября 2019

В WPF этот момент может быть самым сложным. WPF / UWP разработан для MVVM, и я не знаю никого, кроме начинающих, которые программируют за пределами MVVM. И я не могу придумать, как это сделать с MVVM.

PictureBox также является элементом WinForms. Эквивалент WPF называется Изображение .

Подобные навигационные средства не являются тривиальной вещью. Одна из причин, по которой их так мало. Но это сводится к нескольким шагам процесса:

  1. Получите координаты пикселей x и y, по которым щелкнули, также в зависимости от общего размера отображения изображения. Обычно MouseClick Event будет инструментом для этого, но я не могу его найти. MouseDown или LeftMouseDown являются ближайшими событиями.

  2. Если все изображение было показано без масштабирования или обрезки, то теперь это просто математика. Если это было 20% от оси X и 21% от оси Y, довольно легко определить, где 20% от X и 21 от Y находятся на SourceImage.

  3. Если было какое-либо увеличение или кадрирование, это следует учитывать, в противном случае оно равно 2.

  4. . Выровняйте положение пикселя изображения с известными для него координатами.

Часть 1 будет выглядеть следующим образом и должна быть зарегистрирована в событии MouseDown или LeftMouseDown изображения:

private void ContentControl_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
  //Unpack the sender
  Image source = (Image)Sender;

  //Get the click point
  Point clickPoint = e.GetPosition(source);

  //There is more then 1 height Property in WPF. 
  //The Actuall one is what you are looking for
  //Unfortunately you get doubles for this and int for the other. Consider general advise regarding double math
  double ElementHeight = source.ActualHeight;
  double ElementWidth = source.ActualWidth;

  //Do what you need to find the relative position

  //Part 2
}

Надеюсь, кто-то другой может дать вам лучший ответ.

...