PictureBox, SizeMode
От: DAAD Россия  
Дата: 17.05.05 03:07
Оценка:
День добрый.
Попытался найти ответы через поиск на форумах и ничего не нашел.
Вопрос в следующем. У меня есть PictureBox в который я гружу Image.
Проблема в том, что картинка если она больше размером выходит за рамки видимости.
Делаю this.pcbDraft.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
Получается искажение рисунка. Хотелось бы узнать как решить вопрос с маштабированием.
Чтобы рисунок всегда вписывался в PictureBox и при этот не искажалось изображение.
Re: PictureBox, SizeMode
От: HotDog Швейцария www.denebspace.com
Дата: 18.05.05 11:19
Оценка: 3 (1)
Здравствуйте, 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);
                }
            }
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.