2016-11-25 10 views
0

Рассмотрим точку в координатах 821, 435 на изображении 1920, 1017, приземляясь где-то посередине. Теперь масштабируйте изображение до 1243, 633 пикселей. Очевидно, что наша точка больше не находится в этих координатах, но уменьшена вместе с изображением. Как бы я вычислил, какими будут координаты новой точки?Масштабное разрешение точек хранения изображений

Для следующих предположим originalX = 1920 & newX = 1243 и что мы просто решение для первого значения x прямо сейчас (в конце концов, делает масштаб для y)

я сделал newX/originalX, чтобы получить 0.64739583, которые я могу использовать originalX * 0.64739583 и получите 1243, указывая newX is 64.739583% из originalX. Теперь вернемся к нашей предыдущей точке x, 821. Ожидается, что x новой точки будет 482, за исключением того, что originalX * 0.64739583 = 531. 482 не 531, так что точки не совпадают, как они ожидают, с масштабированием% от 64.7

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

Некоторые другие примеры точек до/после масштабирования:

  • old = {width=1920, x=1807, y=996}, new = {width=1280, x=1167, y=698}
  • old = {width=1920, x=1178, y=814}, new = {width=1280, x=1138, y=516}
  • old = {width=1920, x=5, y=831}, new = {width=1517, x=5, y=693}
+0

'х является ожидаемый 482' - ожидается от кого? – MBo

+0

@MBo точка - это конкретное пятно графического интерфейса в изображении, которое находится в прямом центре и слегка смещено - это скриншот программы. Ожидается, что 'x' будет' 482' является результатом изменения разрешения программы (в этом случае выведения из максимизированного), что дает ему меньшее разрешение. '821' является' x' до un-maximizing, '482' после. – Scarsz

ответ

0

Если такие позиции действительно происходят, то масштабирование не является линейным, как

NewX = X * NewWidth/OldWidth 

Вместо этого я вижу следующее: Там нет масштабирования, но смещение изображения, сохраняя при этом центральное положение

middle of 1920 = 960 
960 - 821 = 139 
middle of 1243 = 621 
621 - 482 = 139 ! 

Так закон преобразования выглядит (я не могу утверждать это на одном примере)

NewX = NewWidth/2 + (OldX - OldWidth/2) 
+0

К сожалению, не идеально подходит, но определенно хорошая попытка для образца, который я предоставил. Я добавил еще кое-что; Я все еще не знаю, как это сделать. – Scarsz

+0

Не могли бы вы показать фотографии для этих магических преобразований? (Обратите внимание на ту же самую разницу с правым краем в первом из новых примеров) – MBo

 Смежные вопросы

  • Нет связанных вопросов^_^