2014-09-15 8 views
0

Оригинальный вопрос: Original questionRescale прямоугольник (Top, Left, снизу, справа)

У меня есть изображение I1 размера height x width = (1500,500) уменьшенного до (500,300).

I1 содержит ограничивающие коробки, характеризующиеся их координатами (Top, Left, Bottom, Right).


Как переранжировать координаты ограничительные рамки, когда размер I1 изменяется? Правильно ли эти формулы?

double newTop = Math.Ceiling((top) * (double)pictureBox1.Height/(double)image1.Height); 
    double newLeft = Math.Ceiling((left) * (double)pictureBox1.Width/(double)image1.Width); 
    double newBottom = Math.Ceiling((bottom + 1) * (double)pictureBox1.Height/(double)image1.Height) - 1; 
    double newRight = Math.Ceiling((right + 1) * (double)pictureBox1.Width/(double)image1.Width) - 1; 

+1

Как бы то ни было, с кратким взглядом, не пытаясь его попробовать. – Codor

+0

Вы уверены, что должны делать целые деления? Мне кажется, что вы столкнетесь с серьезными ошибками, если я полностью не пойму ваш код. – InBetween

+0

@ Внутри вы правы. Возможно, из-за целых чисел я не могу правильно масштабировать рамку. Я попробую сейчас. Шоуд Я беру верхнюю или нижнюю границу? для деления –

ответ

1

В общем:

Размеры шкалы множителем (нового размера)/(старый размер).

Координаты немного сложнее:

x2 = left2 + (x1 - left1) * width2/width1 
y2 = top2 + (y1 - top1) * height2/height1 

left, где и width и т.д. описывают расположение всего изображения. x и y описывают преобразованную функцию. В вашем случае углы ограничивающих прямоугольников - это функции.

Если left1, left2, top1, top2 все равно нуль, то получит выражение, подобное вашему.

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

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