Ho un'icona con alcune dimensioni diverse (16px, 32px, 64px). Sto chiamando ToBitmap()
su di esso, ma restituisce sempre l'immagine a 32px. Come posso recuperare il 64px?Selezionare la dimensione di un System.Drawing.Icon?
risposta
Questa è una limitazione abbastanza dolorosa nella classe ResourceManager. Il suo metodo GetObject() non fornisce un modo per passare argomenti aggiuntivi che consentano di selezionare l'icona restituita per dimensione. Una soluzione alternativa è di aggiungere l'icona al progetto. Usa Progetto + Aggiungi elemento esistente, seleziona il tuo file .ico. Seleziona l'icona aggiunta e modifica la proprietà Build Action su "Embedded Resource".
È ora possibile recuperare l'icona desiderata con il codice come questo:
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");
}
utilizzo Esempio:
var icon1 = GetIconFromEmbeddedResource("ARW04LT", new Size(16, 16));
var icon2 = GetIconFromEmbeddedResource("ARW04LT", new Size(32, 32));
Attenzione una modalità di guasto possibili: questo codice si presuppone che l'icona è stata aggiunta alla stessa assembly che contiene il metodo.
Non riuscivo a farlo funzionare. La stringa rname non includeva i nomi delle risorse all'interno del file –
Questo ha funzionato per me. Le altre soluzioni non lo hanno fatto perché avevo bisogno dell'icona di un assemblaggio dato il suo percorso. Ho caricato l'assieme in un solo contesto di riflessione. È importante che l'icona sia una "Risorsa incorporata" nell'assembly; altrimenti, non funziona. – redcurry
Utilizzando VS Express 15, ho impostato la proprietà 'Persistenza 'per Icon nel mio' Resources.resx' su 'Embedded in .resx'; è equivalente all'impostazione della proprietà 'Build Action' su' Embedded Resource'? –
Non esiste alcun metodo incorporato nel framework .Net che esegue questa operazione.
Invece, è possibile utilizzare this library.
La dimensione è determinata quando si crea prima l'istanza Icon
, quindi è necessario specificare quale formato che si desidera utilizzare quando si crea, utilizzando uno dei Icon
constructors che prendono un parametro Size
.
Ciao grazie. Questo avrebbe senso, ma la mia icona si trova all'interno di un file di risorse. Come modifico il costruttore? –
Questo aiuto?
Icon sizedIcon = new Icon(Resources.ResourceIcon, new Size(64,64));
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);
}
}
}
Per fortuna, non è necessario copiare l'intera cosa in questo modo! – Ashe
Per chiunque altro inciampo sullo stesso problema, ho trovato un po 'di bella soluzione.
Image img = new Icon(Properties.Resources.myIcon, width, height).ToBitmap()
Sembrava molto tempo per questo; funziona alla grande! –
Questo è esattamente. La risorsa icona contiene tutte le dimensioni, usa solo New() per ottenere quello che vuoi. –
Quanto segue imposta le dimensioni dell'icona per tutti i pulsanti nella barra degli strumenti.
Si basa sul nome della risorsa che viene memorizzato nel tag button.
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();
}
}
}
- 1. Converti System.Drawing.Icon in System.Media.ImageSource
- 2. Jquery Cambiamento uniforme selezionare la dimensione
- 3. Converti PNG trasparente in System.Drawing.Icon nel codice
- 4. Come si crea un System.Drawing.Icon con più dimensioni/immagini?
- 5. Come controllare la dimensione/dimensione di un grafico con ggplot2
- 6. Selezionare la prima istanza di un record
- 7. Ottenere la dimensione di un elemento di CSS3 trasformato
- 8. Come ottenere la dimensione di un JPopupMenu?
- 9. Come cambiare la dimensione di un popover
- 10. Trova la dimensione di un oggetto polimorfico
- 11. python. ottenere la dimensione di un oggetto
- 12. Come trovare la dimensione della memoria virtuale e la dimensione della cache di un sistema Linux?
- 13. Modifica la dimensione di UIStepper?
- 14. Modifica solo la dimensione di un UIFont su un UIButton
- 15. La dimensione del carattere * è uguale alla dimensione di int *?
- 16. La proprietà dimensione ha una dimensione non valida di 0
- 17. Posso modificare la dimensione di hunk ** predefinita ** di git-add?
- 18. Come recuperare la dimensione di un file prima di caricarlo?
- 19. Stimare la dimensione di un repository Git prima di clonarlo
- 20. modificare la dimensione dell'array
- 21. Selezionare solo la parte frazionaria del valore di un numero
- 22. jQuery: selezionare contemporaneamente la classe e l'ID di un elemento?
- 23. Come disabilitare la possibilità di selezionare in un DataGridView?
- 24. Dimensione fissa la lista
- 25. In tal caso la dimensione fisica di un file sarà inferiore alla dimensione logica?
- 26. Posso limitare la dimensione di un array in Scala?
- 27. Come determinare la dimensione di un'icona da un HICON?
- 28. Come ottenere la dimensione di un intervallo in Excel
- 29. Come posso stimare la dimensione di un indice Oracle?
- 30. Come ottenere la dimensione di un componente in nativo reattivo?
A proposito, questo è _System_.Drawing.Icon e 'ToBitmap()' _method_. – SLaks
Ciao SLaks, hai ragione. Ci scusiamo per l'errore di battitura. –