0

我很好地从 Alex M 那里获得了一个代码,用于将背景图像绘制到面板上,但我意识到如果 aPictureBox设置BackgroundImage了其 Center 图像属性,则绘制的图像会被拉伸但不会居中。我到目前为止有这个代码:

private void panel1_Paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(pictureBox1.BackgroundImage, 
        new Rectangle(pictureBox1.Location, pictureBox1.Size));
}

这会将背景图像绘制到面板,但如果pictureBox1的背景图像属性设置为 CENTER,它不会在矩形的中心绘制图像,而是拉伸图像以适合矩形。

我找到的唯一可能的解决方案是here,但我无法理解。

4

1 回答 1

1

图像被拉伸的原因是因为 DrawImage 的第二个参数指定了绘制图像的位置和大小,并且指定了图片框的整个区域,而不是图像本身的区域。

如果要居中,请尝试以下操作:

private void panel1_Paint(object sender, PaintEventArgs e)
{
    var hPadding = (pictureBox1.Width - pictureBox1.BackgroundImage.Width) / 2;
    var vPadding = (pictureBox1.Height - pictureBox1.BackgroundImage.Height) / 2;
    var imgRect = new Rectangle(pictureBox1.Left + hPadding, pictureBox1.Top + vPadding, pictureBox1.BackgroundImage.Width, pictureBox1.BackgroundImage.Height);
    e.Graphics.DrawImage(pictureBox1.BackgroundImage, imgRect);
}
于 2012-07-02T19:51:25.860 回答