День добрый.
Попытался найти ответы через поиск на форумах и ничего не нашел.
Вопрос в следующем. У меня есть PictureBox в который я гружу Image.
Проблема в том, что картинка если она больше размером выходит за рамки видимости.
Делаю this.pcbDraft.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
Получается искажение рисунка. Хотелось бы узнать как решить вопрос с маштабированием.
Чтобы рисунок всегда вписывался в PictureBox и при этот не искажалось изображение.
Здравствуйте, DAAD, Вы писали:
DAA>Попытался найти ответы через поиск на форумах и ничего не нашел.
Замени PictureBox на ZoomPictureBox и будет тебе счастье
public class ZoomPictureBox : PictureBox
{
public ZoomPictureBox()
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
}
protected override void OnPaint(PaintEventArgs pe)
{
if (this.Image == null)
base.OnPaint (pe);
else
{
if (this.SizeMode != PictureBoxSizeMode.StretchImage)
{
base.OnPaint (pe);
}
else
{
pe.Graphics.FillRectangle(new SolidBrush(this.BackColor),
new Rectangle(0,0,this.Width,this.Height));
float _width = 0;
float _height = 0;
float _k1 = (float)this.Width/(float)this.Image.Width;
float _k2 = (float)this.Height/(float)this.Image.Height;
if (_k1 < _k2)
{
_width = this.Image.Width * _k1;
_height = this.Image.Height * _k1;
}
else
{
_width = this.Image.Width * _k2;
_height = this.Image.Height * _k2;
}
pe.Graphics.DrawImage(this.Image,
(this.Width - _width)/2F,
(this.Height - _height)/2F,
_width, _height);
}
}
}
}