У меня есть значок, который имеет несколько разных размеров (16px, 32px, 64px). Я нахожу ToBitmap()
на нем, но он всегда возвращает изображение 32px. Как получить 64px один?
Выбор размера System.Drawing.Icon?
Ответ 1
Это довольно болезненное ограничение в классе 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));
Остерегайтесь одного возможного отказа: этот код предполагает, что значок был добавлен в ту же сборку, которая содержит этот метод.
Ответ 2
Помогает ли это?
Icon sizedIcon = new Icon(Resources.ResourceIcon, new Size(64,64));
Ответ 3
Для кого-то другого, наткнувшегося на ту же проблему, я нашел небольшое небольшое решение.
Image img = new Icon(Properties.Resources.myIcon, width, height).ToBitmap()
Ответ 4
Ниже задается размер значка для всех кнопок на панели инструментов.
Он зависит от имени ресурса, хранящегося в теге кнопки.
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();
}
}
}
Ответ 5
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);
}
}
}
Ответ 6
В .NET Framework нет встроенного метода.
Вместо этого вы можете использовать эту библиотеку.
Ответ 7
Размер определяется при создании экземпляра Icon
, поэтому вам нужно указать, какой размер вы хотите использовать при его создании, используя один из Icon
конструкторы, которые принимают параметр Size
.