[WIN32]-PNG einbinden und verwenden

Naja das funktioniert jetzt, also werden in der richtigen Größe dargestellt... Das Problem bleibt aber die lange Ladezeit....
Ich hab es halt so gamcht das das Programm sich die Bilder alle am Anfang unter ("data\\image\\name.png") holt und in die Variabeln einspeichert.
In WM_PAINT soll es dann die Bilder darstellen per:
Code:
if( Variabelnname ) {
	Gdiplus::Graphics g(hdc);
	g.DrawImage(Variabelnname, Gdiplus::PointF(0, 0));
}
Und am Schluss sollen die Variabeln wieder freigegeben werden mit:
Code:
delete Variabelnname;
Aber irgendwie ist das wohl zuviel denn das Programm belegt laut Taskmanager 822.645 K Speicher und das obwohl alle Bilder zusammen gerademal 1.21 MB groß sind... Also was ist da falsch?
 
Um wieviel Bilder mit welcher Auflösung geht es denn? Die reine Dateigröße hat nicht viel zu sagen, da PNGs komprimiert sind, im Speicher aber die unkomprimierten Pixeldaten abgelegt werden.

Zeigst du denn alle Bilder gleichzeitig an? Ansonsten könntest du vielleicht doch nur diejenigen laden, die unmittellbar verwendet werden.

Gruß
MCoder
 
Wenn du innerhalb einer case-Anweisung Variablen deklarierst, musst du den ganzen Block in geschweifte Klammern einschließen:
C++:
case 1:
{
    int x = 0; 
    // ...
}
break;
Gruß
MCoder
 
Das mit den geschweiften Klammern geht auch nicht weil dann die Meldung kommt, das die Variable nicht deklariert ist... was mir aber noch aufgefallen ist: Das Programm läuft eigendlich ganz gut bis auf kleine Ladungsstörungen "überlädt" sich aber nach 15 sekunden im eigendlich programm ( vorher nur einstellungen vornehmen). Kann das daran liegen das ich per WM_TIMER alle 15 Sekunden einen Bereich aktualisiere der das PNG schneidet und nur Teilweise erneuern müsste?
 
Das mit den geschweiften Klammern geht auch nicht weil dann die Meldung kommt, das die Variable nicht deklariert ist...
Dann musst du sie außerhalb des switch/case-Blocks oder möglicherweise global deklarieren.

Zu deinem anderen Problem: Die 15 Sekunden sind ein langes Intervall, da sollte es eigentlich eine Konflikte geben. Wenn du generell das ganze Fenster aktualisierst, sollte es auch keine Darstellungsprobleme geben. Was genau meinst du eigentlich mit "das Programm überlädt sich"?

Gruß
MCoder
 
Îch mein damit das es für die aktualiesierung des gesammten oder auch nur eines Teilbereichs um die 3 Sekunden braucht und PNGs nichtmehr darstellt.
Mir ist aber aufgefallen das das nich an dem 15 Sekunden Interval liegt sondern viel mehr an einer generellen Programmlaufzeit von 15-20 Sekunden. Ich versteh das einfach nicht... Warum nach dieser Zeit? Warum funktioniert das vorher (egal wie oft ich den Berreich erneuern lasse und dann nicht mehr?
 
Ich denke, jetzt wird's schwierig, hier noch was dazu zu sagen. Könntest du relevante Codeteile (wo auch das Problem auftritt) aus deinem Projekt herauslösen und zeigen?

Gruß
MCoder
 
Hmm ich denke das ist mehr der Code zum Ausgeben der Bilder.
Also ich hab da folgendes festgestellt.
Wenn das Programm läuft beginnt die Speicherauslastung um die 5.000K. Dann mit jedem Mausklick oder Tastatureingabe die das Programm verarbeiten steigt diese um 20.000 - 50.000K! Sobald ein Wetr um die 600.000K überschritten ist werden die PNGs nichtmehr angezeigt. Bei einer minimierung des Fensters geht die Speicherauslastung auf 4.000K zurück aber die Bilder werden trotzdem nichtmehr gezeigt, daher glaube ich das diese aus dem Speicher genommen wurden.
Das gleiche passiert bei nur einem Bild (nur im geringeren Maßstab).
Also irgendwie muss der Code den ich benutze einen Fehler aufweisen was die Speicherung der Bilder angeht...

Ich habe die Bilder vor dem switch in WndProc geladen... Kann das der Fehler sein? Das die Bilder immerwieder, bei jeder Nachricht neu geladen werden?
 

Neue Beiträge

Zurück