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