Ответ 1
Я считаю, что это эффект PictureBoxSizeMode.Zoom
. В документации указано, что:
Размер изображения увеличивается или уменьшается, поддерживая соотношение размеров.
Вы устанавливаете это в свойстве PictureBox.SizeMode
. В разделе "Замечания" документации для этой функции также говорится:
Использование значения Zoom приводит к тому, что изображение растягивается или уменьшается, чтобы соответствовать PictureBox; однако соотношение сторон в оригинале сохраняется.
Вы можете, конечно, установить свойство PictureBox.SizeMode
либо в окне свойств конструктора, либо в коде (например, в конструкторе формы):
myPictureBox.SizeMode = PictureBoxSizeMode.Zoom;
Если это не делает то, что вы хотите, вы всегда можете реализовать логику изменения размера. Ваша забота заключается в том, что воссоздание образа в памяти при каждом изменении размера элемента управления "похоже на плохую идею", но я не уверен, почему так кажется вам. Единственная проблема была бы в том, что вы не были бы осторожны, чтобы уничтожить неиспользуемые графические объекты, например старый Bitmap
. Мало того, что эти объекты содержат неуправляемые ресурсы, которые необходимо освободить, вы начнете оказывать чрезмерное давление на память, если вы просто позволяете им течь.
В качестве альтернативы, чтобы избежать создания временных растровых изображений, вы можете сделать то, что, возможно, делает элемент управления PictureBox внутри, и использовать метод Graphics.DrawImage
для обработки растяжения. Если вы передадите ему прямоугольник, он автоматически масштабирует изображение, чтобы оно поместилось внутри прямоугольника.