0

Alex Mから、背景画像をパネルにペイントするためのコードがうまく提供されましたが、PictureBox'sBackgroundImageにCenterimageプロパティが設定されている場合、描画された画像は引き伸ばされますが、中央に配置されないことに気付きました。私はこれまでにこのコードを持っています:

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

これにより、背景画像がパネルに描画されますが、pictureBox1の背景画像プロパティがCENTERに設定されている場合、長方形の中心に画像は描画されず、代わりに長方形に合うように画像が引き伸ばされます。

私が見つけた唯一の可能な解決策はここにありますが、私はそれを理解することができません。

4

1 に答える 1

1

イメージが引き伸ばされる理由は、DrawImage の 2 番目のパラメーターがイメージを描画する場所とサイズを指定し、イメージ自体の領域ではなく、ピクチャ ボックスの領域全体を指定しているためです。

中央に配置したい場合は、次のようにしてください。

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 に答える