Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Slideshow

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.11.2007, 13:57 Uhr
Marian Schrader



Hi, ich möchte auf einer Party die Bilder derselbigen als Slideshow zeigen. Natürlich kommen während der Party Bilder dazu, es gibt jedoch keine Slideshow, die überprüft, ob neue Inhalte hinzugekommen sind. Also muss man die Slideshow, nachdem man neue Bilder in den Quellordner kopiert hat, neu starten. Das nervt mich!

Ich möchte also eine kleines Slideshow-Proggy basteln, dass nach einem Durchlauf den Ordner erneut scannt und so neue Inhalte ohne einen Neustart der Diashow automatisch mit anzeigt. (Echt krass, dass es anscheinend im ganze Web sowas nicht gibt)

Dürfte auch kein Problem sein. Ich stehe jedoch noch ziemlich am Anfang. Mein bisheriger Stand ist, dass man einen Ordner auswählt und daraufhin der Inhalt als Slideshow abgespielt wird.
ABER es gibt da ein Problem, die Speicherbelegung!
Mal kurz mein Code:


C++:
this->aBilder = System::IO::Directory::GetFiles(this->folderBrowserDialog1->SelectedPath, L"*.jpg");
int x = this->aBilder->Length;
for (int i = 0; i < x; i++) {
    this->panel1->BackgroundImage = System::Drawing::Image::FromFile(this->aBilder[i]);
    this->panel1->Refresh();
}


aBilder ist ein String-Array. Die Schleife ist nur ein Test; wird später mit Timern geregelt

Obwohl ich in meinem Ordner 21 Bilder habe (73MB) verbraucht mein kleines Produkt satte 430MB Speicher.

Ich vermute, dass mein panel1 die Ressourcen nicht frei gibt, wenn ich ein neues Bild als Hintergund zuweise? Ist das korrekt? Wenn ja, wie schaffe ich das?
Wenn nicht, kann mich einer aufklären?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.11.2007, 14:02 Uhr
Marian Schrader



Und eine weitere Frage habe ich noch.

Ich würde gerne (statt der Schleife) immer auf ein Element von aBilder zugreifen.

Also:
zeige this->aBilder[0] an
lösche this->aBilder[0]
zeige this->aBilder[0] (das dann das ursprüngliche this->aBilder[1] zeigt usw.)

Dafür muss ich ja wohl (sofern es keinen Elemente-Lösch-Befehl gibt) die Adresse von this->aBilder[0] mit der von aBilder[1] ersetzen und den Nachfolger auf this->aBilder[2] setzen; so dass this->aBilder[0] dann das eigentliche this->aBilder[1] anzeigt, this->aBilder[1] das eigentliche this->aBilder[2] etc.

Ich bekomms aber echt nicht gebacken. Wäre euch für eine kleine Hilfe wirklich dankbar.

Wäre natürlich auch schön, wenn man nicht genutzten Speicher freigeben würde!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.11.2007, 14:53 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Das ist doch .Net Code oder? Weil dann schieb ich es ins richtige Forum
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.11.2007, 15:04 Uhr
Marian Schrader



Oh sorry. Ich hab's hier gepostet, weil ich es ja in VC++ programmiere.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.11.2007, 15:26 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Kein Problem

Ob der hohe Speicherverbrauch wirklich an deiner Arbeit mit dem Panel liegt kannst du einfach prüfen indem du die Schleife debuggst und nach jedem mal wenn du ein Bild zugewiesen hast im Taskmanager schaust um wieviel sich der Speicherverbrauch erhöht hat.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.11.2007, 18:59 Uhr
Marian Schrader



Ich habe mir das jetzt mal genau im TM beobachtet.

Nach 14 Bilder verbrauchte mein Programm ca. 370MB, beim 15 Bild stieg es kurz auf 400MB und fiel dann plötzlich auf 40MB.
Danach stieg es wieder an.

Jetzt ist die Slideshow beendet, und es werden trotzdem noch 137MB verbraucht; sehr merkwürdig.

Es wird zwischendurch also anscheinend mal Speicher freigemacht, das scheint aber nur sporadisch zu geschehen. Bei großen Dateien und kurzer Anzeigedauer könnte das schnell ein Problem werden.
Außerdem finde ich den Speicherbedarf für diese Art Programm auch ziemlich unverschämt

Klicke ich nun, nach dem Ende der Slideshow, auf einen Menüeintrag, fällt der benötigte Speicher auf 17MB..

Ähm...?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.11.2007, 19:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
der .net garbagecollector schlägt da wohl zu
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.11.2007, 19:19 Uhr
Marian Schrader



Ne Idee, wie ich das von Hand erledigen kann?


C++:
private: System::Void TimerEventProcessor(System::Object^ sender, System::Timers::ElapsedEventArgs^ e) {
                        this->lFileNames->Remove(lFileNames[0]);
                        if (this->lFileNames->Count > 0) {
                            this->tTimer->Stop();
                            this->panel1->BackgroundImage = System::Drawing::Image::FromFile(this->lFileNames[0]);
                            this->tTimer->Start();
                            this->panel1->Refresh();
                        } else {
                            this->tTimer->Stop();
                        }


         }
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: