Выбор размера System.Drawing.Icon? - PullRequest
21 голосов
/ 26 октября 2010

У меня есть значок, который имеет несколько разных размеров (16px, 32px, 64px). Я звоню ToBitmap() на него, но он всегда возвращает изображение 32px. Как мне получить 64px один?

Ответы [ 7 ]

28 голосов
/ 29 ноября 2010

Это помогает?

Icon sizedIcon = new Icon(Resources.ResourceIcon, new Size(64,64));
22 голосов
/ 14 августа 2012

Для всех, кто сталкивался с той же проблемой, я нашел милое небольшое решение.

13 голосов
/ 26 октября 2010

Это довольно болезненное ограничение в классе ResourceManager. Его метод GetObject () не предоставляет способ передать дополнительные аргументы, которые позволили бы выбрать возвращаемый значок по размеру. Обходной путь - вместо этого добавить значок в проект. Используйте Project + Add Existing Item, выберите ваш .ico файл. Выберите добавленный значок и измените свойство Build Action на «Встроенный ресурс».

Теперь вы можете получить нужный значок с кодом, подобным следующему:

    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 голосов
/ 15 января 2013

Следующее устанавливает размер значков для всех кнопок на панели инструментов.
Это зависит от имени ресурса, сохраненного в теге кнопки.

1 голос
/ 08 августа 2012
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);
        }
    }
}
0 голосов
/ 26 октября 2010

Размер определяется при первом создании экземпляра Icon, поэтому вам нужно указать, какой размер вы хотите использовать при его создании, используя один из Icon конструкторов , которые принимаютSize параметр.

0 голосов
/ 26 октября 2010

В .Net Framework нет встроенного метода, который бы делал это.

Вместо этого вы можете использовать эту библиотеку .

...