带有“缩放”布局的背景图片的实际尺寸

时间:2017-05-09 20:44:34

标签: c# winforms

使用“缩放”布局背景图像实际宽度和高度并不总是与包含控件的宽度和高度匹配,而不是“拉伸”布局。我想知道winforms中是否有属性或某些东西可以检索当前图像渲染的尺寸而不进行任何数学运算?

1 个答案:

答案 0 :(得分:2)

这会为Rectangle中的任何一个PictureBox返回SizeModes像素。

但是,是的,缩放模式确实需要一些数学。

它可以很容易地适应相应的BackgroudImageLayout值:

Rectangle ImageArea(PictureBox pbox)
{
    Size si = pbox.Image.Size;
    Size sp = pbox.ClientSize;

    if (pbox.SizeMode == PictureBoxSizeMode.StretchImage) return pbox.ClientRectangle;
    if (pbox.SizeMode == PictureBoxSizeMode.Normal ||
       pbox.SizeMode == PictureBoxSizeMode.AutoSize) return new Rectangle(Point.Empty, si);
    if (pbox.SizeMode == PictureBoxSizeMode.CenterImage)
        return new Rectangle(new Point( (sp.Width - si.Width) / 2,
                            (sp.Height - si.Height) / 2), si); 

    //  PictureBoxSizeMode.Zoom
    float ri = 1f * si.Width / si.Height;
    float rp = 1f * sp.Width / sp.Height;
    if (rp > ri)
    {
        int width = si.Width * sp.Height / si.Height;
        int left = (sp.Width - width) / 2;
        return new Rectangle(left, 0, width, sp.Height);
    }
    else
    {
        int height = si.Height * sp.Width / si.Width;
        int top = (sp.Height - height) / 2;
        return new Rectangle(0, top, sp.Width, height);
    }
}