标签图像模式拉伸

7
我写了这段代码来添加我的标签:Labels
JArray a = JArray.Parse(temp);
Label[] labels = new Label[100];
foreach (JObject o in a.Children<JObject>())
{
    foreach (JProperty p in o.Properties())
    {
        string name = p.Name;
        string value = p.Value.ToString();
        if (name == "name")
        {
            labels[counter] = new Label();
            //Image i = Image.FromFile("item.jpg");
            labels[counter].Text = value;
            labels[counter].Image =Image.FromFile("item.jpg");
            //labels[counter].Image
            //labels[counter].BackColor = Color.Blue;
            labels[counter].TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
            labels[counter].Top = height;      
            height += 50;
            Controls.Add(labels[counter]);
        }
    }
}
应该拉伸到
4个回答

13

Winforms控件中,展示和操作图像和文本的能力分散得相当混乱。

  • Label无法拉伸其Image
  • PictureBoxPanel可以,但它们不显示它们的Text
  • Button可以完成两者功能,但无论如何样式化,它始终是一个Button

因此,要获得组合效果,您需要要么自己绘画:

  • 使用重载的DrawImage获取正确大小的图像,然后将Image添加到Label中。
  • 或在Panel上绘制Text,以便将其显示在图像旁边。

要么您可以结合两个具有正确功能的控件:

您可以创建一个Panel,将其BackgroundImage设置为您的图像,BackgroundImageLayout=Stretch。然后,您可以将Label添加到Panel的控件集合中,并将其文本设置为Panel的控件集合。

// preparation for testing:
Image image = Image.FromFile("D:\\stop32.png");
Size size = new Size(77, 77);

// create the combined control
// I assume your Label is already there
Panel pan = new Panel();
pan.Size = size;
// or, since the Label has the right size:
pan.Size = label.Size;  // use Clientsize, if borders are involved!
pan.BackgroundImage = image;
pan.BackgroundImageLayout = ImageLayout.Stretch;
label.Parent = pan;  // add the Label to the Panel
label.Location = Point.Empty;
label.Text = "TEXT";
label.BackColor = Color.Transparent;

// add to (e.g.) the form
pan.Parent = this;

自行设置边框..

另一个选项:如果所有图像都应该具有相同的大小,并且它的大小不超过256x256像素,则可以将它们添加到ImageList中。这样可以非常简单地将它们拉伸到ImageList.ImageSize大小,并将它们添加到您的Label中。


4
非常简单:
VB
Label1.Image = New Bitmap(Image.FromFile("Screenshot.jpg"), Label1.Size)

C#
Label1.Image = new Bitmap(Image.FromFile("Screenshot.jpg"), Label1.Size);

0

如果你正在使用 WinForms,可以尝试以下代码:

labels[counter].Size = 
    new Size(labels[counter].Image.Width, labels[counter].Image.Height);

Jack,你的代码让我的标签大小变成了图片大小,但我想要的是图片大小适应标签大小。 - elnaz irani
啊,如果你需要反过来的话,请在将图像分配给标签之前调整其大小。 - Jack
如何调整图像大小? - elnaz irani
位图调整大小 BmpResize(Image.FromFile("item.jpg"), labels[counter].Width, labels[counter].Height) { Bitmap result = new Bitmap(width, height); using (Graphics g = Graphics.FromImage(result)) g.DrawImage(sourceBMP, 0, 0, width, height); return result; } - Jack
@elnazirani 请参考:https://dev59.com/SXI-5IYBdhLWcg3wTWdu - Anthony

0

这对我来说完美地运作:

  • 只需在设计模式下设置图像(不要使用imagelist),使用“Image”选项

  • 如果我们将label1作为标签放置图像的位置,将下一行放在构造函数内:

    label1.Image = new Bitmap(label1.Image, label1.Size);

我试过Zibri的解决方案,但在我的情况下会使图像变形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接