Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 背景图像的实际尺寸,带“尺寸”;“缩放”;布局_C#_Winforms - Fatal编程技术网

C# 背景图像的实际尺寸,带“尺寸”;“缩放”;布局

C# 背景图像的实际尺寸,带“尺寸”;“缩放”;布局,c#,winforms,C#,Winforms,与“拉伸”布局相反,“缩放”布局背景图像的实际宽度和高度并不总是与包含控件的宽度和高度匹配。我想知道winforms中是否有一个属性或某些东西可以在不做任何数学运算的情况下检索当前图像渲染的维度?这将从PictureBox中返回其大小节点的矩形像素 但是是的,缩放模式确实需要一些数学运算 它可以很容易地适应相应的backgroundimagelayout值: Rectangle ImageArea(PictureBox pbox) { Size si = pbox.Image.Size;

与“拉伸”布局相反,“缩放”布局背景图像的实际宽度和高度并不总是与包含控件的宽度和高度匹配。我想知道winforms中是否有一个属性或某些东西可以在不做任何数学运算的情况下检索当前图像渲染的维度?

这将从
PictureBox
中返回其
大小节点的
矩形
像素

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

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

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);
    }
}

我什么都不知道。数学真的那么吓人吗?@adv12不,我喜欢数学,事实上我在等待答案的时候已经做过了,但为什么要重新发明一个轮子呢?有点像我想到的,虽然关于
PictureBox
的问题中没有一个词是正确的,但是
Panel
Label
等控件的
BackgroundImageLayout
PictureBoxSizeMode
基本相同,除了它没有
平铺
模式,但有一个
自动调整大小
模式。两年后的编辑(乘以1)有什么用?