2013-06-19 22 views
14

Rozumiem, że to pytanie zostało wcześniej zadane (i udzielono odpowiedzi). Jednak żadne z rozwiązań nie działa dla mnie. Może to wynikać z mojej niekompetencji, przekleństw voodoo lub czegoś prostego i oczywistego, czego mi brakuje.Ładowanie obrazu PictureBox z pliku zasobów ze ścieżką (część 3)

Poniżej znajduje się zrzut ekranu z wszystkich odpowiednich kawałków układanki:

Screen capture http://dinosaur-island.com/PlantPictureBoxScreenCap.jpg

Jak widać istnieje wiele BMP roślin załadowanych jako zasoby do folderu Obrazy. Istnieje formularz z obrazkiem o nazwie "PlantPicture". Jest ciąg, który wiem, ma dobrą drogę (bo sprawdziłem go w debugera):

  PicPath = PicPath+".bmp"; 

Screen capture http://dinosaur-island.com/PlantDebugger.jpg

Próbowałem wiele sposobów załadunku, odlewanie, itd., Itp

Jeśli chcesz się zlitować i dać mu jeszcze jeden strzał, będę wdzięczny za radę. Dzięki!

Odpowiedz

28

Ścieżka powinna wyglądać następująco: "Images\a.bmp". (Uwaga brak wiodący ukośnik, a ukośniki będąc powrotem ukośniki).

, a następnie:

pictureBox1.Image = Image.FromFile(@"Images\a.bmp"); 

prostu próbowałem to, aby upewnić się, i to działa. Jest to oprócz drugiej odpowiedzi, którą masz - "zawsze kopiuj".

+0

Udało się dużo, aby uzyskać zwrotne ukośne odbicie. PicPath = "@Images \ None.bmp" (jest to poprawna ścieżka dla "żadnego" obrazu) ... Zgłasza błąd: "Nieobsługiwany wyjątek typu" System " .IO.FileNotFoundException "wystąpił w System.Drawing.dll Dodatkowe informacje @Images \ None.bmp ... double-check.Nie.bmp istnieje zarówno w zasobach, jak i folderze na dysku" Obrazy " – zetar

+1

@zetar" @ Obrazy \ None.bmp "jest błędne. @" Obrazy \ None.bmp "jest poprawne. @ Mówi C#, aby _nie_ uciekło z" N ", które jest po" \ "i raczej traktuje" \ "jako zwykły ukośnik odwrotny. Możesz to również zrobić za pomocą: "\\" (podwójny ukośnik odwrotny). – ispiro

+0

GOT IT! USUŃ @ w ciągu, który został przekazany! – zetar

2

Ustawienie "Kopiuj do katalogu wyjściowego" na "Kopiuj zawsze" lub "Kopiuj, jeśli nowsze" może ci pomóc.

Twoja ścieżka PicPath to względna ścieżka, która w pewnym momencie jest konwertowana na ścieżkę bezwzględną podczas ładowania obrazu. Najprawdopodobniej zobaczysz, że nie ma żadnych obrazów w określonej lokalizacji, jeśli używasz Path.GetFullPath(PicPath) w debugowaniu.

+0

zmieniłem na „Kopiuj zawsze” ... wyjście z Path.GetFullPath (PicPath) to "C: \\ Images \\ None.bmp" - Oczywiście nie tego chciałem. Ale naprawdę nie chcę, aby obraz był ładowany z twardego dysku. Czy te obrazy nie są dostępne (jak nazywaliśmy lata temu) "prekompilowanymi obrazami inline"? – zetar

+0

Tak. Przepraszam, że pod nadzorem wiodącym/jak podano ispiro. – wonko79

9

Ok ... więc najpierw trzeba importować w projekcję obrazu

1) Wybierz PictureBox w formie projekt

2) Zadania Otwarte PictureBox (to mała strzałka pinted do prawej na krawędź na PictureBox)

3) Kliknij na „Wybierz obraz ...”

4) Wybierz drugą opcję „plik zasobów projektu” (opcja ta będzie utworzyć folder o nazwie „Zasoby”, które można dostęp za pomocą Properties.Resources)

5) Kliknij na import i wybierz obraz z komputera (obecnie kopia obrazu o takiej samej nazwie jak obraz zostanie wysłany w folderze Resources utworzonego w kroku 4)

6) kliknij OK

Teraz obraz jest w projekcie i można go użyć z poleceniem Właściwości.Wystarczy wpisać ten kod, gdy chcesz zmienić obraz z PictureBox:

pictureBox1.Image = Properties.Resources.myimage; 

Uwaga: myimage reprezentować nazwę obrazu ... po wpisaniu kropki po Resources, w opcjach zostanie on importowanego pliku obrazu

1

Przyjęta odpowiedź ma poważną wadę!
Jeśli obraz został załadowany w ten sposób, obraz zostanie zablokowany zamka, więc jeśli spróbujesz wykonać jakiekolwiek przyszłe operacje na tym obrazie, pojawi się komunikat o błędzie obraz używany w innej aplikacji!
Ten article show solution in VB

i to jest C# implementacja

FileStream fs = new System.IO.FileStream(@"Images\a.bmp", FileMode.Open, FileAccess.Read); 
    pictureBox1.Image = Image.FromStream(fs); 
    fs.Close(); 
6

To zależy od ścieżki pliku. Dla mnie bieżący katalog był [project]\bin\Debug, więc musiałem dwukrotnie przejść do folderu nadrzędnego.

Image image = Image.FromFile(@"..\..\Pictures\"+text+".png"); 
this.pictureBox1.Image = image; 

Aby znaleźć aktualny katalog, możesz zrobić etykietę atrapę zwaną Label2 i napisać:

this.label2.Text = System.IO.Directory.GetCurrentDirectory();