Выбор размера System.Drawing.Icon?

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

Это довольно болезненное ограничение в classе ResourceManager. Его метод GetObject () не предоставляет способ передать дополнительные аргументы, которые позволят выбрать возвращаемый значок по размеру. Обходным путем является добавление значка в проект вместо этого. Используйте Project + Добавить существующий элемент, выберите ваш .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)); 

Остерегайтесь одного возможного отказа: этот код предполагает, что значок был добавлен в ту же сборку, которая содержит этот метод.

Помогает ли это?

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

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

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

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

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

Внутри .NET Framework нет встроенного метода.

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

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

  • Разница между длинными и внутренними типами данных
  • C # «Параметр недействителен». Создание нового растрового изображения
  • Может кто-нибудь объяснить этот код шаблона, который дает мне размер массива?
  • В C, почему sizeof (char) 1, когда 'a' является int?
  • Загрузить значение измерения из res / values ​​/ dimension.xml из исходного кода
  • Использование jQuery для получения размера windows просмотра
  • Как resize шрифта JLabel, чтобы взять максимальный размер
  • Почему это происходит с оператором sizeof при сравнении с отрицательным числом?
  • Почему размер моего приложения на устройстве отличается от размера APK или Play Store
  • Установить ширину столбца переменной текста в printf
  • Разница между опциями передачи в aes () и за ее пределами в ggplot2
  • Давайте будем гением компьютера.