Mam obraz w moim projekcie przechowywany w Resources/myimage.jpg. Jak mogę dynamicznie załadować ten obraz do obiektu Bitmap?Załaduj obraz z obszaru zasobów projektu w języku C#
Odpowiedz
Czy używasz Windows Forms? Jeśli dodasz obrazu przy użyciu właściwości/Resources UI, można uzyskać dostęp do obrazu z kodem wygenerowanym, więc można po prostu to zrobić:
var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Nie, jest dodawane jako zwykły plik do folderu Zasoby. –
Ah ok. W takim przypadku myślę, że @ Hallgrim ma dla ciebie odpowiedź, używając strumieni zasobów. Jeśli * używasz * Formularzy systemu Windows, zachęcam Cię do usunięcia obrazu i ponownego dodania go z interfejsu użytkownika - o wiele łatwiej. –
można uzyskać odwołanie do obrazu w następujący sposób:
Image myImage = Resources.myImage;
Jeśli chcesz dokonać kopię obrazu, musisz wykonać następujące czynności:
Bitmap bmp = new Bitmap(Resources.myImage);
nie zapomnij dysponowania o f bmp po zakończeniu pracy. Jeśli nie znasz nazwy obrazu zasobów w czasie kompilacji, można użyć menedżera zasobów:
ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");
Przywilej ResourceManager jest to, że można go używać gdzie Resources.myImage normalnie byłoby się zakresu lub gdzie chcesz dynamicznie uzyskiwać dostęp do zasobów. Dodatkowo działa to w przypadku dźwięków, plików konfiguracyjnych itp.
Musisz załadować go ze strumienia zasobów.
Bitmap bmp = new Bitmap(
System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceStream("MyProject.Resources.myimage.png"));
Jeśli chcesz znać nazwy wszystkich zasobów w swoim zespole, iść z:
string[] all = System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceNames();
foreach (string one in all) {
MessageBox.Show(one);
}
Nie powinieneś używać odbicia - wydaje się to zbyt skomplikowane, biorąc pod uwagę prostsze dostępne metody. –
To rozwiązanie nie działa w języku C#/Windows Phone. NETCF - GetManifestResourceNames() zwraca tylko jedną nazwę, nazwę modułu assembly-DLL. W manifeście dostępny jest tylko jeden zasób - strumień typu blob modułu DLL. Bez C++ i niebezpiecznego kodu, który pozwala na wywoływanie wywołań Win32 API, jest to po prostu królewski ból w tyłku do pracy z tym kawałkiem pamięci. –
Możesz również użyć skrótu 'typeof (this) .Assembly'. –
Najlepszą rzeczą jest to, aby dodać je jako zasoby obrazu w ustawieniach zasobów w projekcie. Następnie możesz uzyskać obraz bezpośrednio, wykonując Resources.myimage. Spowoduje to pobranie obrazu za pomocą wygenerowanej właściwości języka C#.
Jeśli tylko ustawić obraz jako Embedded Resource można uzyskać go z:
string name = "Resources.myimage.jpg"
string namespaceName = "MyCompany.MyNamespace";
string resource = namespaceName + "." + name;
Type type = typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);
Bitmap image = new Bitmap(type.Assembly.GetManifestResourceStream(resource));
Gdzie MyTypeFromSameAssemblyAsResource jest dowolny typ, który masz w swoim zespole.
Co to jest" typ "? – radbyx
"Przestrzeń nazw" nie może być używana jako nazwa zmiennej, a sposób, w jaki przybywasz do MyTypeFromSameAssemblyAsResource, byłby doceniony. –
naprawiono literówkę adresującą problem Jason'a –
Z i Imagebox nazwie „ImagePreview FormStrings.MyImageNames zawiera regularnego pobierania/ustawiania metody rzucania strun, które są powiązane z listy typów scrollbox. ilustracje mają takie same nazwy jak powiązanych nazwisk na liście, z wyjątkiem . .BMP zakończeń Wszystkie bitmapy są przeciągane do resources.resx wystarczająco
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
dziwne, od grzebie w projektancie znajdę to, co wydaje się być znacznie prostsze podejście:
obraz wydaje się być dostępne od .Properties.Resources.
Po prostu używam obrazu, ponieważ wszystko, co mnie interesuje, to wklejenie go do elementu sterującego z obrazem na nim.
(Net 4.0, VS2010.)
Way łatwiej niż większość z proponowanych odpowiedzi
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
W moim przypadku - używałem Ikony w moim zasobem, ale musiałem dodać je dynamicznie obrazy niektórych ToolStripMenuItem
(s). Tak więc w metodzie, którą utworzyłem (z której pochodzi poniższy fragment kodu), musiałem przekonwertować zasoby ikon na bitmapy, zanim mogłem je zwrócić, aby dodać je do mojego MenuItem
.
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
Coś innego mieć świadomość, jeśli obraz/ikona ma spacji (”„) w jego imieniu podczas dodawania ich do zasobu, VS będzie automatycznie zastąpić te przestrzenie z «_» (s). Ponieważ spacje nie są poprawną postacią podczas nazywania zasobu. Z tego powodu używam metody Replace()
w moim kodu odniesienia. Możesz po prostu zignorować tę linię.
Kod używam w kilku z moich projektów ... Zakłada on, że można przechowywać obrazy w zasobie nie tylko jako bitmap ikon
public static Bitmap GetImageByName(string imageName)
{
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
string resourceName = asm.GetName().Name + ".Properties.Resources";
var rm = new System.Resources.ResourceManager(resourceName, asm);
return (Bitmap)rm.GetObject(imageName);
}
To jest bardzo ładne. Dzięki :) – Derrick
proponuję:
System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);
Od MSDN: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Używanie Image.FromStream jest lepsze, ponieważ nie trzeba znać formatu obrazu (bmp, png, ...).
patrzyłem na kod projektanta z jednego z moich projektów i zauważyłem, że użył tego zapisu
myButton.Image = global::MyProjectName.Properties.Resources.max;
gdzie max jest nazwą zasobu I przesłanym do projektu.
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(444, 25);
this.toolStrip1.TabIndex = 0;
this.toolStrip1.Text = "toolStrip1";
object O = global::WindowsFormsApplication1.Properties.Resources.ResourceManager.GetObject("best_robust_ghost");
ToolStripButton btn = new ToolStripButton("m1");
btn.DisplayStyle = ToolStripItemDisplayStyle.Image;
btn.Image = (Image)O;
this.toolStrip1.Items.Add(btn);
Albo można użyć tej linii w kontaktach z WPF lub Silverlight, zwłaszcza gdy masz ciąg źródłowy już znaczników XAML:
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
Jeżeli ImagePath jest coś takiego:
string ImagePath = "/ProjectName;component/Resource/ImageName.png";
Odpowiedź JDS działała najlepiej. C# przykład loading image:
- Dołącz obraz jako Zasobów (projekt podobnego do drzewa> Zasoby, kliknij prawym przyciskiem myszy, aby dodać pożądany plik ImageName.png)
- osadzonego zasobu (Projekt podobnego do drzewa> Resources-> ImageName.png kliknij prawym przyciskiem wybierz polecenie właściwości)
- .png format pliku (.bmp .jpg powinien być również OK)
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
zanotować poniższych:
- Plik obrazu zasobu to "ImageName.png", rozszerzenie pliku należy pominąć.
- Nazwa projektu może być może lepiej rozumiana jako "Nazwa zespołu", która ma być odpowiednią pozycją tekstową na stronie Projekt-> Właściwości.
Przykładowa linia kodu jest uruchamiana pomyślnie przy użyciu społeczności VisualStudio 2015.
Można również zapisać BMP w var tak:
var bmp = Resources.ImageName;
nadzieję, że to pomaga!
- 1. Załaduj obrazy z folderu zasobów
- 2. Załaduj plik Excel z zasobów/złożenia w C#
- 3. Załaduj obraz Picturebox z pamięci?
- 4. Dynamiczne dodawanie i ładowanie obrazu z zasobów w języku C#
- 5. Załaduj obraz wiosną mvc
- 6. Załaduj obraz w tagu img
- 7. Wstępnie załaduj obraz tła
- 8. Jak odtwarzać plik .mp3 z zasobów w języku C#?
- 9. iOS: załaduj obraz z adresu URL
- 10. Uwolnienie zasobów w języku D
- 11. Picasso Załaduj obraz do celu
- 12. Jak ładować obraz zasobów png w Silverlight?
- 13. Utwórz obraz z pliku .dot w języku C#
- 14. Załaduj obraz do UICollectionView w sposób asynchroniczny?
- 15. Załaduj ResourceDictionary z zestawu
- 16. Dostęp do zasobów z projektu biblioteki Android?
- 17. Dziedziczenie z klasy szablonu w języku C++
- 18. Załaduj obraz za pomocą Google Volley
- 19. Opencv java - Załaduj obraz do GUI
- 20. Multipart Form Image Załaduj obraz i Json
- 21. Ładowanie zasobów rozciągliwej Obraz w Fresco SimpleDraweeView
- 22. Android: Universal Image Loader Załaduj duży obraz
- 23. Załaduj obraz za pomocą Phonegap: InvalidCastException
- 24. Zmiana domyślnego obszaru nazw projektu VSTO
- 25. Załaduj kodowany obraz base64 za pomocą FormData?
- 26. Jak obrócić obraz x stopni w języku C#?
- 27. Jak zapisać obiekt graficzny jako obraz w języku C#?
- 28. Załaduj obraz z karty SD za pomocą Glide
- 29. Javascript: Załaduj obraz z adresu URL i wyświetl
- 30. Rysowanie obróconego tekstu na obraz w języku C#
Spójrz na to odpowiedź: http://stackoverflow.com/questions/94456/load-a-wpf-bitmapimage-from-a-system-drawing-bitmap/7375570#7375570 – Roland
To było pytanie to zostało zadane później, ale jest powiązane, jeśli nie duplikatem: http://stackoverflow.com/questions/13592150/load-image-from-resources – vapcguy