отсканированное изображение плана этажа для корректировки пикселей экрана

Я пытаюсь разработать приложение на основе формы Windows в С#. Форма имеет элемент управления изображением и содержит отсканированное изображение плана этажа. Я получаю координаты x и y от пользователя реального пола и хочу нарисовать маленький круг точно в том же месте на изображении. Это показывает местоположение пользователя на карте.

Проблема в том, что мы не можем приравнять координаты реального мира к пикселям экрана. Итак, нам нужно получить формулу для корректировки. Есть ли какая-то формула регулировки или мы делаем это методом проб и ошибок. Также, если мы как-то настроим преобразование, оно будет основано на текущем разрешении экрана. Есть ли какая-либо формула для настройки, которая подходит для разных разрешений экрана, чтобы мы могли запускать приложение на экране любого размера с любым разрешением.


person Novice    schedule 19.06.2013    source источник
comment
подходит ли вам WPF? вы можете ОЧЕНЬ легко сделать это в WPF.   -  person Federico Berasategui    schedule 20.06.2013
comment
К сожалению это не так, приложение уже разработано и я только добавляю в него функционал.   -  person Novice    schedule 20.06.2013


Ответы (1)


Насколько я понимаю, у вас проблемы с некоторым отсутствием понимания координат. В реальном мире мы думаем, что координатная плоскость — это линии X и Y, образующие 4 квадранта.

На компьютере вы работаете только с 1-м квадрантом, и он перевернут, что означает, что origo (0,0) — это ваш верхний левый угол.

так чтобы конвертировать, если вы не хотите, чтобы сделать это в вашей голове

public int computerX(int realWorldX)
{
    return realWorldX+(int)(ImageControl.Width/2);
}

public int computerY(int realWorldY)
{
    int Convert = realWorldY+(int)(ImageControl.Height/2);
    int Flip = ImageControl.Height - Convert;
    return Flip;
}

когда вы поместили реальный мир (1,1), вы использовали какую-то другую координату в программе, судя по всему, 25,25, вы можете просто умножить, поэтому, если вы хотите реальный мир 2,2, напишите 50,50, как это

public int computerX(int realWorldX)
{
    return (realWorldX+(int)(ImageControl.Width/2))*yourXOffset;
}

public int computerY(int realWorldY)
{
    int Convert = realWorldY+(int)(ImageControl.Height/2);
    int Flip = ImageControl.Height - Convert;
    return Flip*yourYOffset;
}
person Thomas Andreè Wang    schedule 20.06.2013
comment
Координаты реального мира также находятся в перевернутом первом квадранте. Итак, мой реальный мир 0,0 находится вверху слева. Проблема здесь связана с масштабированием, я думаю. 1,1 в реальном мире не совпадает с 1,1 пикселем изображения на экране. - person Novice; 20.06.2013
comment
так где именно (1,1)? Изображение вашей проблемы было бы здорово - person Thomas Andreè Wang; 20.06.2013
comment
если это изображение, вы можете превратить его в растровое изображение и использовать графику - person Thomas Andreè Wang; 20.06.2013
comment
И два круга на (0,0) и (1,1), я хотел бы видеть это на 0,0 1,1 2,2 и 3,3, чтобы увидеть, как это обостряется. - person Thomas Andreè Wang; 20.06.2013
comment
Вы рисуете на изображении или на imageControl? то есть вы рисуете на растровом изображении или создаете два и накладываете. - person Thomas Andreè Wang; 20.06.2013
comment
Первый круг находится в точке (1,1) изображения, а второй показывает реальный мир (1,1) на изображении. Что я хочу, чтобы первый круг был сопоставлен со вторым. - person Novice; 20.06.2013
comment
У меня есть одно растровое изображение, и я рисую методом Paint(). - person Novice; 20.06.2013