Mam ikonę, która ma kilka różnych rozmiarów (16px, 32px, 64px). Dzwonię pod numer ToBitmap()
, ale zawsze zwracam obraz 32px. Jak mogę pobrać 64px?Wybieranie rozmiaru pliku System.Drawing.Icon?
Odpowiedz
Jest to dość bolesne ograniczenie w klasie ResourceManager. Jego metoda GetObject() nie zapewnia sposobu przekazywania dodatkowych argumentów, które pozwoliłyby na wybór zwróconej ikony według rozmiaru. Zamiast tego należy dodać ikonę do projektu. Użyj Project + Dodaj istniejący element, wybierz swój plik .ico. Wybierz dodaną ikonę i zmień właściwość Build Action na "Embedded Resource".
Teraz można pobrać odpowiednią ikonę z kodem tak:
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");
}
wykorzystanie próbki:
var icon1 = GetIconFromEmbeddedResource("ARW04LT", new Size(16, 16));
var icon2 = GetIconFromEmbeddedResource("ARW04LT", new Size(32, 32));
Strzeż jeden możliwy tryb awarii: Ten kod zakłada, że ikona została dodana do tego samego zestaw zawierający metodę.
Nie mogłem zmusić tego do działania. Nazwa rmy nie zawiera nazw zasobów w pliku –
To działało dla mnie. Inne rozwiązania nie dlatego, że potrzebowałem ikony ze złożenia, biorąc pod uwagę jego ścieżkę. Załadowałem zespół tylko w kontekście odbicia. Ważne jest, aby ikona była "Osadzonym zasobem" w zespole; w przeciwnym razie nie działa. – redcurry
Używając VS Express 15, ustawiam właściwość 'Persistence' dla Icon w moim' Resources.resx' na 'Embedded in .resx'; czy jest to równoważne ustawieniu właściwości 'Build Action' na' Embedded Resource'? –
Nie ma wbudowanej metody w środowisku .Net, która to robi.
Zamiast tego można użyć this library.
Rozmiar jest określany przy pierwszym utworzeniu instancji Icon
, dlatego należy określić rozmiar, który ma być używany podczas jego tworzenia, przy użyciu jednego z Icon
constructors, który pobiera parametr Size
.
Cześć dzięki. To miałoby sens, ale moja ikona znajduje się w pliku zasobów. Jak zmodyfikować konstruktora? –
Czy to pomaga?
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);
}
}
}
Na szczęście nie ma potrzeby kopiowania tego wszystkiego! – Ashe
dla nikogo innego natrafiają na ten sam problem, Znalazłem ładny mały rozwiązanie.
Image img = new Icon(Properties.Resources.myIcon, width, height).ToBitmap()
Długo się nad tym zastanawiałem; działa świetnie! –
To jest dokładnie to. Zasób ikon zawiera wszystkie rozmiary, po prostu użyj New(), aby uzyskać ten, który chcesz. –
Poniżej przedstawiono rozmiar ikony dla wszystkich przycisków na pasku narzędzi.
Opiera się na nazwie zasobu zapisanej w tagu przycisku.
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. Automatyczne wybieranie rozmiaru bufora dla pliku I/O
- 2. Ograniczenie rozmiaru pliku SWF
- 3. SharpZipLib Sprawdzanie i wybieranie zawartości pliku ZIP
- 4. zmiana rozmiaru obrazu z pliku
- 5. C++: Pobieranie nieprawidłowego rozmiaru pliku
- 6. Ręczne zmienianie rozmiaru pliku JPanel
- 7. Ograniczenie rozmiaru pliku akcji MVC3
- 8. Programowe zmniejszanie rozmiaru pliku JPEG
- 9. Wysyłanie deskryptora pliku przez gniazdo domeny UNIX i wybieranie()
- 10. Zmiana rozmiaru pliku PDF NSImage OSX
- 11. Polecenie Windows tylko dla rozmiaru pliku?
- 12. Zmniejszenie rozmiaru pliku aplikacji na iOS
- 13. Wykrywanie rozmiaru wysyłanego pliku po stronie klienta?
- 14. Zmniejszenie rozmiaru pliku PNG w .NET
- 15. Jakie są ograniczenia rozmiaru pliku danych Fb.ui?
- 16. Klient Sprawdzanie rozmiaru pliku przy użyciu HTML5?
- 17. Komenda Unix do sprawdzania rozmiaru pliku
- 18. Jak przekonwertować obraz do określonego rozmiaru pliku?
- 19. Wybieranie kolumn z pandas.HDFStore table
- 20. java nio Wybieranie wybiórcze
- 21. Wybieranie hurtowni danych dużych
- 22. IE10 Wybieranie numeru skrzynki
- 23. Android, wybieranie zestawu szyfrów
- 24. jQuery: Wybieranie bezpośrednie rodzeństwo
- 25. Cassandra: wybieranie klucza partycji
- 26. Wybieranie wielu wierszy JTable
- 27. Wybieranie liczby kolejnych rekordów
- 28. Cassandra: wybieranie sstable_size_in_mb
- 29. Wybieranie DropKick ze zdjęciami
- 30. Wybieranie części pliku i kopiowanie go do nowego pliku w systemie Linux
Nawiasem mówiąc, to _System_.Drawing.Icon i 'ToBitmap()' _method_. – SLaks
Hi SLaks, masz rację. Przepraszam za literówkę. –