Czy korzystasz z formularzy Windows? Jeśli dodałeś obraz za pomocą interfejsu użytkownika Właściwości / Zasoby, uzyskasz dostęp do obrazu z wygenerowanego kodu, dzięki czemu możesz po prostu to zrobić:
var bmp =newBitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Nie, jest dodawany jako zwykły plik do folderu Zasoby.
Pavel Bastov
9
Ach ok. W takim przypadku myślę, że @ Hallgrim ma dla ciebie odpowiedź za pomocą strumieni zasobów. Jeśli są za pomocą Windows Forms Namawiam, aby usunąć zdjęcie i ponowne dodanie go z UI - dużo łatwiej.
Matt Hamilton
114
Odniesienie do obrazu można uzyskać w następujący sposób:
Image myImage =Resources.myImage;
Jeśli chcesz wykonać kopię obrazu, musisz wykonać następujące czynności:
Bitmap bmp =newBitmap(Resources.myImage);
Nie zapomnij pozbyć się bmp, gdy skończysz. Jeśli nie znasz nazwy obrazu zasobu w czasie kompilacji, możesz użyć menedżera zasobów:
Zaletą ResourceManager jest to, że można go używać tam, gdzie Resources.myImage normalnie byłby poza zakresem lub w celu dynamicznego dostępu do zasobów. Dodatkowo działa to w przypadku dźwięków, plików konfiguracyjnych itp.
Nie powinieneś używać refleksji - wydaje się to zbyt skomplikowane, biorąc pod uwagę dostępne prostsze metody.
Charlie Salts
To rozwiązanie nie działa w C # / Windows Phone .NETCF - GetManifestResourceNames () zwraca tylko jedną nazwę modułu DLL zestawu. W manifeście dostępny jest tylko jeden zasób - obiekt blob strumienia modułu DLL. Bez C ++ i niebezpiecznego kodu pozwalającego na wywoływanie wywołań Win32 API, szczerze mówiąc, praca z tym kawałkiem pamięci jest ogromnym problemem.
Mark Jones
2
Możesz także użyć typeof(this).Assemblyw skrócie.
Sri Harsha Chilakapati
1
@SriHarshaChilakapati typeof(this)nie będzie działać. this.GetType().Assemblyjest najbliżej tego, co powiedziałeś, ale jest ryzykowne, ponieważ przejmie odziedziczoną nadklasę, która może znajdować się w innym zestawie.
John Gibb
2
@SriHarshaChilakapati typeof(this);nie kompiluje się. DostajeszError 1 Type expected
John Gibb
26
O wiele łatwiej niż większość wszystkich proponowanych odpowiedzi
Nie można uzyskać dostępu w ten sposób, jeśli plik nie jest częścią manifestu zasobów, ponieważ OP wyraźnie stwierdza, że został właśnie dodany jako plik.
Wobbles,
1
Chciał także Bitmapprzedmiotu, a nie Imageprzedmiotu.
vapcguy
13
Kod, którego używam w kilku moich projektach ... Zakłada, że obrazy przechowujesz w zasobach tylko jako mapy bitowe, a nie ikony
Najlepiej jest dodać je jako Zasoby obrazu w ustawieniach Zasoby w projekcie. Następnie możesz uzyskać obraz bezpośrednio, wykonując Resources.myimage. Spowoduje to uzyskanie obrazu za pośrednictwem wygenerowanej właściwości C #.
Jeśli ustawisz obraz jako Zasób osadzony, możesz go uzyskać za pomocą:
string name ="Resources.myimage.jpg"string namespaceName ="MyCompany.MyNamespace";string resource = namespaceName +"."+ name;Type type =typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource);Bitmap image =newBitmap(type.Assembly.GetManifestResourceStream(resource));
Gdzie MyTypeFromSameAssemblyAsResource to dowolny typ, który masz w swoim zestawie.
With i ImageBox o nazwie „ImagePreview FormStrings.MyImageNames zawiera zwykłą metodę rzutowania ciągów get / set, które są połączone z listą typów przewijania. Obrazy mają te same nazwy, co powiązane nazwy na liście, z wyjątkiem końcówek .bmp. Wszystkie mapy bitowe są przeciągane do pliku resources.resx
W moim przypadku - korzystałem z ikon w swoim zasobie, ale musiałem dynamicznie dodawać je jako obrazy do niektórych ToolStripMenuItem. Tak więc w metodzie, którą stworzyłem (z której pochodzi poniższy fragment kodu), musiałem przekonwertować zasoby ikon na bitmapy, zanim mogłem je zwrócić w celu dodania do mojego MenuItem.
Coś innego, o czym należy pamiętać, jeśli twój obraz / ikona ma spacje („”) w swojej nazwie, gdy dodasz je do swojego zasobu, VS automatycznie zastąpi te spacje „_” (s). Ponieważ spacje nie są prawidłowym znakiem podczas nazywania zasobu. Dlatego używam tej Replace()metody w kodzie, do którego się odwołuję. Prawdopodobnie możesz po prostu zignorować tę linię.
Odpowiedzi:
Czy korzystasz z formularzy Windows? Jeśli dodałeś obraz za pomocą interfejsu użytkownika Właściwości / Zasoby, uzyskasz dostęp do obrazu z wygenerowanego kodu, dzięki czemu możesz po prostu to zrobić:
źródło
Odniesienie do obrazu można uzyskać w następujący sposób:
Jeśli chcesz wykonać kopię obrazu, musisz wykonać następujące czynności:
Nie zapomnij pozbyć się bmp, gdy skończysz. Jeśli nie znasz nazwy obrazu zasobu w czasie kompilacji, możesz użyć menedżera zasobów:
Zaletą ResourceManager jest to, że można go używać tam, gdzie Resources.myImage normalnie byłby poza zakresem lub w celu dynamicznego dostępu do zasobów. Dodatkowo działa to w przypadku dźwięków, plików konfiguracyjnych itp.
źródło
Musisz go załadować ze strumienia zasobów.
Jeśli chcesz poznać wszystkie nazwy zasobów w swoim zestawie, skorzystaj z:
źródło
typeof(this).Assembly
w skrócie.typeof(this)
nie będzie działać.this.GetType().Assembly
jest najbliżej tego, co powiedziałeś, ale jest ryzykowne, ponieważ przejmie odziedziczoną nadklasę, która może znajdować się w innym zestawie.typeof(this);
nie kompiluje się. DostajeszError 1 Type expected
O wiele łatwiej niż większość wszystkich proponowanych odpowiedzi
źródło
Bitmap
przedmiotu, a nieImage
przedmiotu.Kod, którego używam w kilku moich projektach ... Zakłada, że obrazy przechowujesz w zasobach tylko jako mapy bitowe, a nie ikony
źródło
Najlepiej jest dodać je jako Zasoby obrazu w ustawieniach Zasoby w projekcie. Następnie możesz uzyskać obraz bezpośrednio, wykonując Resources.myimage. Spowoduje to uzyskanie obrazu za pośrednictwem wygenerowanej właściwości C #.
Jeśli ustawisz obraz jako Zasób osadzony, możesz go uzyskać za pomocą:
Gdzie MyTypeFromSameAssemblyAsResource to dowolny typ, który masz w swoim zestawie.
źródło
Użyj poniżej jednego. Przetestowałem to za pomocą komórki widoku siatki formularza Windows.
Nazwę „Resource_Image” można znaleźć w projekcie.
Pod nazwą projektu można znaleźć
Properties
. Rozwiń to. Tam możesz zobaczyćResources.resx
plik. Otwórz to. Zastosuj nazwę pliku jako „Resource_Image”.źródło
With i ImageBox o nazwie „ImagePreview FormStrings.MyImageNames zawiera zwykłą metodę rzutowania ciągów get / set, które są połączone z listą typów przewijania. Obrazy mają te same nazwy, co powiązane nazwy na liście, z wyjątkiem końcówek .bmp. Wszystkie mapy bitowe są przeciągane do pliku resources.resx
źródło
W moim przypadku - korzystałem z ikon w swoim zasobie, ale musiałem dynamicznie dodawać je jako obrazy do niektórych
ToolStripMenuItem
. Tak więc w metodzie, którą stworzyłem (z której pochodzi poniższy fragment kodu), musiałem przekonwertować zasoby ikon na bitmapy, zanim mogłem je zwrócić w celu dodania do mojegoMenuItem
.Coś innego, o czym należy pamiętać, jeśli twój obraz / ikona ma spacje („”) w swojej nazwie, gdy dodasz je do swojego zasobu, VS automatycznie zastąpi te spacje „_” (s). Ponieważ spacje nie są prawidłowym znakiem podczas nazywania zasobu. Dlatego używam tej
Replace()
metody w kodzie, do którego się odwołuję. Prawdopodobnie możesz po prostu zignorować tę linię.źródło
Sugeruję:
Od msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Korzystanie z Image.FromStream jest lepsze, ponieważ nie musisz znać formatu obrazu (bmp, png, ...).
źródło
Odpowiedź JDS działała najlepiej. Przykład C # ładowanie obrazu:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Zwróć uwagę na następujące:
Przykładowa linia kodu jest pomyślnie uruchamiana przy użyciu VisualStudio 2015 Community.
źródło
Możesz także zapisać bmp w var:
mam nadzieję, że to pomoże!
źródło
O dziwo, po wbiciu się w projektanta znajduję coś, co wydaje się być znacznie prostszym podejściem:
Obraz wydaje się być dostępny z .Properties.Resources.
Po prostu używam obrazu, ponieważ wszystko, co mnie interesuje, to wklejenie go do kontrolki z obrazem na nim.
(Net 4.0, VS2010.)
źródło
Spojrzałem na kod projektanta z jednego z moich projektów i zauważyłem, że używa tego zapisu
gdzie max to nazwa zasobu, który przesłałem do projektu.
źródło
Lub możesz użyć tej linii, gdy masz do czynienia z WPF lub Silverlight, szczególnie tam, gdzie masz ciąg źródłowy już w znaczniku XAML:
Gdzie ImagePath jest coś takiego:
źródło
źródło