Gdi+, HintergrundBild, Prozessorlast



  • Hallo Leute,

    ich hab eine (wie ich finde) etwas blöde Frage, aber ich komm einfach nicht drauf *g*

    Es geht darum, dass ich in der Draw Funktion jede menge Zeug pinsle. Funktioniert auch prächtig, bis auf das, dass die Prozessorlast ständig bei ca. 20% ist.

    In dem Bereich, der das verursacht, zeichne ich ein paar JPG's..

    Ich würd gern diese JPG's nur ein mal zeichnen und darauf den ganzen Rest draufklatschen.. aber wie? 🙂

    Tja... ich verwende ganz normal Graphics::DrawImage und an dem liegt auch die hohe Prozessorlast

    Ich würde mich über einen kleinen Tipp sehr freuen 😉

    Danke schon mal

    lg
    Willie



  • Der standard Tip ist, im Speicher zeichnen und erst das fertige Bild darstellen.



  • Mach ich .. am Ende klatsch ich alles mitn BitBlt hin.



  • Wie sieht denn deine Zeichenfunktion aus?



  • Wenn sich die Bilder nicht ändern, kannst du auch CachedBitmap benutzen. Das gibt auch einen Performance-Schub, da die Grafik device-abhängig wird. D.h. optimiert für die Auflösung und Farbtiefe des aktuellen Bildschirmmodus. Wenn man keine CachedBitmaps nutzt, müssen logischerweise die Bilder immer wieder dynamisch an das Device angepasst werden, da du ja logischerweise die Bilder auch auf einem Drucker o.a. ausgeben könntest. Auch könnte sich von einem Moment auf den anderen der Bildschirmmodus ändern.



  • Was genau meinst du damit, dass sich die Bilder nicht ändern?

    Es ist so, dass die Bilder bei jedem Aufruf von Draw an der selben Position mit der selben Grösse gezeichnet werden.
    CachedBitmaps hätt ich ausprobiert, aber irgendwie kann ich die Bilder da nicht ordentlich skalieren (oder ich überseh die Funktion..).

    Der Teil der Draw-Funktion, der so viel CPU frisst ist dieser:

    PointF destinationPoints[] = { 
    	PointF(m_rectMat.right-m_pcLänge , 1),
    	PointF(m_rectMat.right, 1),				
    	PointF(m_rectMat.right-m_pcLänge , m_rectMat.Height()-1)}; 
    graphicsMatVerflg.DrawImage(m_iER, destinationPoints, 3);
    

    Allerdings wird das 6 mal ausgeführt, weil ich 6 Bildchen zum Zeichnen habe.

    Wenn ich die sechs DrawImage-Zeilen auskommentiere, schrumpft die Prozessorlast von 20-30% auf 1-2%

    lg
    Willie


Anmelden zum Antworten