Пропорциональное увеличение контейнера C#
Доброго времени суток!
Есть пикчербоксы, которым заданы начальные размеры, а также привязка к сторонам формы для резинового макета. Вопрос: как при расширении формы сохранить пропорцию сторон пикчербоксов?
Ответы (1 шт):
Если важны пропорции изображения, а не самого PictureBox, то можно просто установить:
pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
после этого изображение всегда будет сохранять свои пропорции, независимо от пропорций PictureBox.
Можно также сделать привязку PictureBox только к одной из сторон формы, а размер по второй оси вычислять в событии Resize. Для примера, вычисление высоты для соотношения сторон 16:9 (ширина привязана к ширине формы):
private void pictureBox_Resize(object sender, EventArgs e) {
pictureBox.Height = (int)((float)pictureBox.Width / 16 * 9);
}
приведение к float здесь используется потому что иначе (если делить/умножать int) возникает заметная погрешность. Но такой вариант подойдёт не всегда.
Если описанные выше варианты не подошли, то наверное придётся обрабатывать Resize формы, определять размеры доступной области и по ним самостоятельно вычислять нужные размеры PictureBox. Например так (опять же для соотношения сторон 16:9, входные параметры - максимальная доступная ширина и максимальная доступная высота):
Size AdjustSize(int max_width, int max_height)
{
float width = max_width; // берём максимальную доступную ширину
float height = (width / 16) * 9; // вычисляем по ней высоту
if (height >= max_height) { // если полученная высота превышает доступную
height = max_height; // пересчитываем заново
width = (height / 9) * 16; // но теперь уже исходя из доступной высоты
}
return new Size((int)width, (int)height);
}