Как центрировать изображение в картинке при изменении размера? - PullRequest
6 голосов
/ 30 июля 2011

Как я могу центрировать изображение в картинке, когда я изменяю размер формы?У меня есть панель изображений на панели, поэтому, если изображение больше, чем поле изображения, я могу получить полосы прокрутки на панели.Но это не работает в режиме «Размер изображения» «Center Image» и работает только с «Auto Size».

Ответы [ 3 ]

17 голосов
/ 30 июля 2011

Не используйте PictureBox здесь, Panel уже вполне может отображать центрированное изображение через свойство BackgroundImage.Все, что нужно, это включить его свойство DoubleBuffered для подавления мерцания.Добавьте новый класс в ваш проект и вставьте код, показанный ниже.Компиляция.Перетащите новый элемент управления из верхней части панели инструментов на форму, заменив панель.Назначьте его свойство BackgroundImage в окне «Свойства» или в своем коде.

using System;
using System.Drawing;
using System.Windows.Forms;

internal class PicturePanel : Panel {
    public PicturePanel() {
        this.DoubleBuffered = true;
        this.AutoScroll = true;
        this.BackgroundImageLayout = ImageLayout.Center;
    }
    public override Image BackgroundImage {
        get { return base.BackgroundImage; }
        set { 
            base.BackgroundImage = value;
            if (value != null) this.AutoScrollMinSize = value.Size;
        }
    }
}
6 голосов
/ 20 декабря 2017

Это легко сделать с помощью свойства SizeMode

pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
0 голосов
/ 01 мая 2017

Что не так с использованием Padding?

void picturebox_Paint(object sender, PaintEventArgs e)
{
    int a = picturebox.Width - picturebox.Image.Width;
    int b = picturebox.Height - picturebox.Image.Height;
    Padding p = new System.Windows.Forms.Padding();
    p.Left = a / 2;
    p.Top = b / 2;
    picturebox.Padding = p;
}
...