Selecionando o tamanho de um System.Drawing.Icon?

Eu tenho um ícone que tem alguns tamanhos diferentes (16px, 32px, 64px). Eu estou chamando ToBitmap() , mas está sempre retornando a imagem de 32px. Como faço para recuperar o 64px?

Essa é uma limitação bastante dolorosa na class ResourceManager. Seu método GetObject () não fornece uma maneira de passar argumentos extras que permitam selecionar o ícone retornado por tamanho. Uma solução alternativa é adicionar o ícone ao projeto. Use Project + Add Existing Item, selecione seu arquivo .ico. Selecione o ícone adicionado e altere a propriedade Build Action para “Embedded Resource”.

Agora você pode recuperar o ícone desejado com código como este:

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

Uso da amostra:

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

Tenha cuidado com um possível modo de falha: este código supõe que o ícone foi adicionado ao mesmo conjunto que contém o método.

Isso ajuda?

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

Para qualquer um que tropeçar no mesmo problema, encontrei uma boa solução.

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

O seguinte define o tamanho do ícone para todos os botões na barra de ferramentas.
Ele depende do nome do recurso que está sendo armazenado na tag de botão.

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

Não existe um método embutido no framework .Net que faça isso.

Em vez disso, você pode usar essa biblioteca .

O tamanho é determinado quando você cria a instância do Icon pela primeira vez, portanto, é necessário especificar qual tamanho você deseja usar ao criá-lo, usando um dos construtores Icon que usam um parâmetro Size .