选择System.Drawing.Icon的大小?

时间:2010-10-26 15:48:44

标签: c# icons size system.drawing

我有一个图标,有几个不同的尺寸(16px,32px,64px)。我正在调用ToBitmap(),但它总是返回32px图像。如何检索64px的?

7 个答案:

答案 0 :(得分:27)

这有帮助吗?

Icon sizedIcon = new Icon(Resources.ResourceIcon, new Size(64,64));

答案 1 :(得分:22)

对于遇到同样问题的其他人,我找到了一个很好的小解决方案。

Image img = new Icon(Properties.Resources.myIcon, width, height).ToBitmap()

答案 2 :(得分:13)

这是ResourceManager类中相当痛苦的限制。它的GetObject()方法没有提供传递额外参数的方法,这些参数允许按大小选择返回的图标。解决方法是将图标添加到项目中。使用Project + Add Existing Item,选择.ico文件。选择添加的图标,将Build Action属性更改为“Embedded Resource”。

您现在可以使用以下代码检索所需的图标:

    public static Icon GetIconFromEmbeddedResource(string name, Size size) {
        var asm = System.Reflection.Assembly.GetExecutingAssembly();
        var rnames = asm.GetManifestResourceNames();
        var tofind = "." + name + ".ICO";
        foreach (string rname in rnames) {
            if (rname.EndsWith(tofind, StringComparison.CurrentCultureIgnoreCase)) {
                using (var stream = asm.GetManifestResourceStream(rname)) {
                    return new Icon(stream, size);
                }
            }
        }
        throw new ArgumentException("Icon not found");
    }

样本用法:

        var icon1 = GetIconFromEmbeddedResource("ARW04LT", new Size(16, 16));
        var icon2 = GetIconFromEmbeddedResource("ARW04LT", new Size(32, 32));

请注意一种可能的故障模式:此代码假定图标已添加到包含该方法的同一程序集中。

答案 3 :(得分:3)

以下设置工具栏中所有按钮的图标大小 它依赖于存储在按钮标记中的资源名称。

public void SetButtons(object toolstrip, int IconWidth, int IconHeight)
{
    var ts = (ToolStrip) toolstrip;
    var size = new System.Drawing.Size();
    size.Height = IconSize;
    size.Width = IconSize;

    foreach (ToolStripButton tsBtn in ts.Items)
    {
        tsBtn.ImageScaling = ToolStripItemImageScaling.None;
        var resourcename = (String) tsBtn.Tag;
        if (resourcename != null)
        {
            var myIcon = (Icon) Properties.Resources.ResourceManager.GetObject(resourcename);
            var newIcon = new Icon(myIcon, IconWidth, IconHeight);
            tsBtn.Image = newIcon.ToBitmap();
        }
    }
}

答案 4 :(得分:1)

internal static class IconHelper {
    public static Icon GetSize(this Icon icon, int width, int height) {
        return icon.GetSize(new Size(width, height));
    }

    public static Icon GetSize(this Icon icon, Size size) {
        using(var mem = new MemoryStream()) {
            icon.Save(mem);
            mem.Position = 0;
            return new Icon(mem, size);
        }
    }
}

答案 5 :(得分:0)

.Net框架中没有内置方法可以做到这一点。

相反,您可以使用this library

答案 6 :(得分:0)

首次创建Icon实例时会确定大小,因此您需要使用{{1} Size中的一个来指定创建时使用的大小。参数。