.NetCF,WinMobile, jak dołączać i używać bitmap w projekcie?

0

Witam

Prosze o pomoc mam problem bo gdy napisze

Bitmap b = new Bitmap("C:\\Users\\Kamila\\Desktop\\krzyzyk.bmp");

to otrzymuje wyjatek Could not find a part of the path '\C:\Users\Kamila\Desktop\krzyzyk.bmp'.

W okienku Locals mam to samo tylko ze dodaje dwa sleshe prze litera dysku -> '\C:\Users\Kamila\Desktop\krzyzyk.bmp'

Moze mozna to jakos wylaczyc zeby nie dodawal tak tych sleshy sam z siebie ?
Sciezka jest prawidlowa.

Pisze w Visual Studio 2008 Pro na Win7 64bit RC
Projekt na PocketPC

Pozdrawiam i licze na jakas pomoc.

1

Szybka odpowiedź - niemożliwe.

edit: tak, niemożliwe. Nawet sam sprawdziłem czy bitmap przypadkiem nie wymaga ścieżki relatywnej, ale nie.

0

http://www.csharp-examples.net/get-files-from-directory/

        string fileName = @"c:\temp\myfile.bmp";
        string relativeFile = @".\woohoo\temp.bmp";
        string addressName = @"http://www.google.com/blahblah.html";

Kiedyś miałem problem z otwarceim painta w Windowsie no i w końcu tak mi się udało:

Process p = new Process();
                    p.StartInfo.FileName = "C:\\WINDOWS\\system32\\mspaint.exe";
                    MessageBox.Show(this.currImages.CurrImagePath());
                    p.StartInfo.Arguments = "\"" + this.currImages.CurrImagePath() + "\"";
                    //zwolnij obrazek 
                    //Image i = this.myPictureBox1.Image;
                    //this.myPictureBox1.Image = null;
                    //i.Dispose();
                    //this.currBitmap = null;
                    //
                    p.Start();
                    p.WaitForExit();
                    p.Dispose();
0
Console.WriteLine(Path.Combine("d:", "file.txt"));
Console.WriteLine(Path.Combine(@"d:\", "file.txt"));
Console.WriteLine(Path.Combine(@"d:\path1", @"\file.txt"));
Console.WriteLine(Path.Combine(@"d:\path1", "file.txt"));
Console.WriteLine(Path.Combine(@"d:\path1\", "file.txt"));

/* OUTPUT

d:file.txt
d:\file.txt
\file.txt
d:\path1\file.txt
d:\path1\file.txt

*/

1

@akrajka - tak, tylko że '@' nic nie zmienia w stringu, a jedynie wyłącza sekwencje ucieczki...

Jeśli to podziała to zjem swoją klawiaturę ;-P

0

Przed chwilą napisałem małą aplikacje w C# do otwierania obrazka i działa ok

Oto kod:

private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                String path = "C:\\temp\\ag.bmp";
                Bitmap b = new Bitmap(path);
                this.pictureBox1.Image = b;
                
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.ToString());
            }
        }
0

To też działa :

 private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                String path = "C:\\temp\\B\\a\\ag.bmp";
                Bitmap b = new Bitmap(path);
                this.pictureBox1.Image = b;
                
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.ToString());
            }
        }

To też:

private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                String path = @"C:\temp\B\a\ag.bmp";
                Bitmap b = new Bitmap(path);
                this.pictureBox1.Image = b;
                
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.ToString());
            }
        }
0

Hmm, moim zdaniem problemem jest to że piszesz aplikację pod mobilny system. Tam raczej nie ma dysków/partycji oznaczonych literami. "" zazwyczaj oznaczy katalog główny i możliwe że klasa z automatu dodaje znak roota .

0

Myślę, że jest tak jak mówisz. Sprawdziłem czy ta sama sytuacja zachodzi w projekcie z windows forms i sie okazalo ze wszystko jest ok.
Czyli ze to jest zwiazane ze smart device tzn z tym jak to sie pod to robi bo na pewno to ja cos robie nie tak jak trzeba. Powgrywam do wszystkich podkatalogow z projektem ta bitmape i zobacze czy to cos pomoze.

To nic nie pomoglo. Nie rozumiem dlaczego on sie o to pluje. Dodalem ta bitmape do projektu , jako sciezke podaje nawe pliku + rozszerzenie a mu nadal malo.

0

W systemach mobilnych nie ma czegoś takiego jak dysk c, d itp.

Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);

W ten sposób możesz odczytać ścieżkę do swojego programu i wtedy wgrać ten plik do katalogu głównego lub podkatalogu aplikacji. Jeśli podasz tylko nazwę pliku to system będzie go szukał w głównej gałęzi systemu plików.
0

Wgrać? Ale jak to zrobić ?
Czy mógłbyś mi podać przykład jak to się robi ?

1

Wgrać? Ale jak to zrobić ?

Skopiować, Luke.

0

Z tym, ze ja nie wiem jak to zrobic.

Ponizszy kod mi nie dziala bo poket nie widzi katalogow windowsa

private void Form1_Load(object sender, EventArgs e)
        {
             String temp, sciezka;
             
             temp = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase ) ;
       
             sciezka = temp.Substring(0,temp.LastIndexOf('\\')+1);
             sciezka += "krzyzyk.bmp";
             File.Copy("C:\\nowy\\krzyzyk.bmp",sciezka);
        }
0

mma ochote pociac ten watek, bo panuje tutaj straszny chaos, ale szczerze mowiac, sam nie wiem co zostawic..

po pierwsze: BITMAP bierze taka sciezke, jaka mu podasz

ALE, po drugie: o ile dobrze pamietam, na systemach klasy WindowsMobile NIE ISTNIEJE cos takiego jak 'current working directory', wiec podawanie sciezek wzglednych jest bez sensu. mozna probowac ja zgadywac na podstawie swojego Assembly.Location..
wiec: sciezka ktora podasz zostnie po prostu potraktowana jako absolutna

po trzecie: na windows mobile, w przeciwienstwie do np. symbiana, NIE MA liter dyskow. ktos wczesniej juz Ci to napisal, wiec ODCZEP SIE ŻESZ od tego C: !!! z godnie co napisalem przed momentem, jezeli napiszesz "USER\BLE\OBRAZ.bmp" bedzie to oznaczalo samczubek-glownyduzykatalogUSER-podkatalogBLE-plikOBRAZ

po czwarte: jestem prawieze pewien (a tylko 'prawie' dlatego ze jak dotad uzywalem Nomadów i Psionów ktore byly WindowsMobile5 i 6, ale NIE byly konkretnie 'PocketPC'), ze na urzadzeniu mobilnym NIE MA katalogow takich jak "\USERS" czy "\Documents and Settings". Wlacz sobie jakiegos menedzera plikow na tymże urządzeniu obejrzyj sobie jakie katalogi są . Powinny byc np. \PROGRAMS, \SD CARD, \SYSTEM. Twoj program bedize zainstalowany gdzies wewnatrz \programs. polecam szukac tam Twoich plikow jezeli masz je gdzies w solution

nie wiem co Ci powiedziec wiecej.. najlepiej spakukj caly projekt zipem i zamiesc gdzies, sprobuje to us iebie obejrzec, ale na razie mam wrazenie ze w ogole nie wiesz co masz na urzadzeniu!

0

Ja wszystko zrozumialem jesli chodzi o to ze nie ma sciezek jak w windowsie ale pytalem jak mam to skopiowac tam na urzadzenie. Ten projekt to po prostu gra w kolko i krzyzyk. Moge sobie w opcjach emulatora ustawic katalog wspoldzielony z windowsem i dzieki temu skopiowac te bitmapki na emulator
(I chyba to o to Wam chodzilo mowiac o kopiowaniu)
tam gdzie jest exec ale to odpada bo to projekt na zaliczenie przedmiotu i wykladowca nie bedzie mial tego katalogu u siebie a raczej nie bedzie zadowolony z tego ze za kazdym trzeba taki katalog definiowac by mozna bylo skopiowac bitmapki. Visual powinien miec mozliwosc dodania zasobow i korzystania z nich w czasie runtime.
Chce po prostu miec mozliwosc podmiany zaladowanego obrazka do pictureBoxa
Chcialem to zrobic w ten sposob ze stworze sobie statyczne pictureboxy i bede je odpowiednio ustawial lub podmienial obraz (albo kolko albo krzyzyk) Najszybciej i najprosciej. Inna alternatywa ktora w tej chwili mi pozostaje to rysowanie na canvasie albo na picturebox jesli sie da kolek i krzyzykow za pomoca pena

Zamiescilem projekt pod adresem:
www.malborg.user.icpnet.pl

Na koniec chcialem podziekowac Wszystkim za pomoc bo przeciez nic z tego nie macie a mimo to chcialo Wam sie mi doradzic co z tym fantem zrobic.

0

Tak, Visual ma taka opcje. Po pierwsze - mozesz skorzystac z czegos, co sie zwie 'zasobami', jest to plik Properties\Resources (powinienes go miec automatycznie) i do niego mozesz dodawac o, na przyklad Bitmapy. Dwuklik na nim, na gorze wybierz z comboboxa typ zasobu "Images", dodaj swoja bitmape, nazwij ja na przyklad "Logo", albo "Kółko" --- i od tej pory, jezeli w jakims pliku napiszesz "MojNamespaceProgramu . Resources . " to znajdziesz w tejże klasie 'Resources' wszystkie swoje dodane zasoby -- jako zmienne. W tym przypadku znajdziesz zmienna System.Drawing.Image Logo (albo Kółko) -- i wystarczy ja przypisac do picboxa. Od tej pory, dopoki bitmapa sie nie zmieni, nie musisz o nia sie klopotac -- bedzie wcisnieta w .exe, nawet nie musisz jej kopiowac ani nic. Jak sie zas obrazek zmieni - byc moze bedziesz musial odswiezyc go w Resources

Druga opcja, mozesz tez 'zasoby' dolaczac do projektu luzem, nie jako Resources. W tym celu dodaj do projektu "Existing Item..." i wskaz swoja bitmape. Obok plikow z kodem pojawi Ci sie teraz plik Kółko.jpg. Nie bedize on kompilowany - gdyz nie jest to kod. Ba, w dodatku Visual nic z nim nie bedzie zamierzal domyslnie zrobic, gdyz to nie jest kod i nie umie sie domyslic. Kliknij w SolutionExplorer na tym pliku prawym myszy, wybierz Properties. Pojawi sie kilka ustawien - najwazniejsze to:

  • Build Action: pewnie zastaniesz "None" obrazujace niedomyślność Visuala. zmien na "CONTENT", czyli -- 'po prostu wez zawartosc pliku jaka jest teraz'
  • Copy to output directory: zastaniesz "Do not copy", zmien na "Copy always" albo "Copy if newer"
    Od teraz, ilekroc skompilujesz program, w katalogu Bin/Debug czy tam Bin/Release, poza .exe pojawia Ci sie takze Twoje pliki obrazow! Jak taka aplikacje odpalisz poprzez Visuala na urzadzeniu mobilnym, to Visual juz sie za Ciebie zatroszczy zeby pliki te znalazly sie tam rowniez tuż obok .exe. Jak juz wyzej napisalem, mimo ze idea workingdirectory nie istnieje, to na szczescie mozesz poznac Sciezke do aktualnie wykonywanego modulu popoprzez assembly.getexecuting().location -- i tamże będą siedziec od razu te pliki

Opcja trzecia - dorzuc do Solution nowy projekt typu INSTALLER, gdzies tam w szablonach projektow mobilnych jest taki. UStaw go zeby pobieral "output files" z projektu Twojego, dodatkowo do "FileSystem" do "ApplicationDirectory" kaz mu dolaczyc pliki obrazkow. Od tej pory, on sie zatroszczy o to zeby one sie tam znalazy. Ty sie do nich dostaniesz przez w/w getexecutingassembly.location czy tez chyba mozna na winmobile poprzez appdomain.. W kazdym badz razie, projekt instalatora, jak go RECZNIE(!!) zbudujesz, stworzy Ci plik TWOJAAPLIKACJA.CAB ktory bedziesz mogl zainstalowac na docelowym urzadzeniu. W tymze jednym CABie (jezeli podolaczales pliki do grupy filesystem) znajduje sie juz wszystko, exe, bmp, etc, i instalator sam sobie porozstawia pliki tam gdzie mu kazales. Wystarczy ze skopiujesz CAB do tego wspoldzielonego katalogu, przeniesie sie on na urzadzenie, na urzadzeniu go dwuklikniesz i ponaciskasz taktakdalejdalej. Deinstalacja jest gdzies w manu systemowym, mozna tez po prostu odpalic nowy instalator i nowa wersja zastapi stara.
Podkreslilem ze RECZNIE musisz go budowac (prawoklik w Visualu i Build), poniewaz cos tam jest lekko skopane i ani buildowanie "solution" ani buildowanie instalatora NIE odswieza zaleznosci. To znaczy, ze jak zbududjesz solution to builder CAB sie nie odpali. To oznacza takze ze jak pacniesz build na instalatorze to APLIKACJA nie zostanie zrebuildowana i builder instalatora wezmie to-co-masz-teraz-na-dysku-nawet-jesli-bedzie-walniete.

Na Twoje potrzeby polecam opcje numer JEDEN.
Jezeli chcesz miec full-wypas, probuj z instalatorem.

edit: nie patrzalem na projekt jeszcze, sadze ze z Resources/opcja1 sobie poradzisz. Jeżeli nie masz takiego plku, kliknij prawym na projekcie, wybierz wlasciwosci - pojawi sie zakladkowy dokument ustawien projektu. Wybierz zakladke Resources. Bedzie ona kompletnie pusta z jednym niebieskawym linkiem po srodku mówiącym "Nie ma jeszcze pliku zasobow, kliknij tutaj aby go wygenerować". Kliknij. Już jest. Go to opcja 1.

edit2: zmieniłem Ci temat, taki chyba pasuje bardziej

0

Dziękuje za okazana mi pomoc i zainteresowanie :)
Było tak jak przypuszczałeś - poradziłem sobie z opcja nr 1 :)

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1