Per Code eine Bitmap aus vielen Bildern zusammensetzen?

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von X-Zat.

    Per Code eine Bitmap aus vielen Bildern zusammensetzen?

    Hallo Leute!

    Bin dabei ein Spiel zu programmieren, bekomme jedoch Probleme, da die CPU-Auslastung 50% erreicht. Der PC muss bis zu 1024 einzelne 16x16 Pixel große Bilder alle 40 ms zeichnen.
    Ich dachte mir, es könnte einfacher sein, wenn ich eine Bitmap zur Laufzeit generieren lasse, die sich aus den bis zu 1024 Bildern zusammensetzt. - Frage ist nur: Wie mach ich das?

    VB.NET-Quellcode

    1. Dim tempBitmap As Bitmap


    Soviel weiß ich schon - Habe aber keine Ahnung, wie ich 'ne Größe angeben kann (muss 512x512 Pixel sein) und dann dort drauf meine einzelnen Bitmaps zeichnen lassen kann :(

    Wäre super, wenn mir da jemand helfen könnte! Ich brauche keinen C&P, nur vllt einen Link oder ähnliches, um das Prinzip zu verstehen^^
    Hi
    Um eine neue Bitmap zu erzeugen, musst du den Konstruktor aufrufen:

    VB.NET-Quellcode

    1. Dim tempBitmap As Bitmap = New Bitmap(width, height)


    Anschließend kannst du auf die Bitmap zeichnen. Dazu kannst du mit Graphics.FromImage ein Graphics-Objekt erzeugen. Dort kannst du dann die Images zeichnen. Eventuell solltest du CompositingMode auf Drawing2D.CompositingMode.SourceCopy stellen, da sonst die benötigte Zeit extrem hoch ist (dabei wird allerdings nicht die Farbe mit dem Hintergrund gemischt).

    Du kannst aber auch die BufferedGraphics-Klasse verwenden. Dazu habe ich hier mal ein Tutorial erstellt: [VB.NET] BufferedGraphics - Schnell zeichnen ohne Flimmern

    Gruß
    ~blaze~
    Danke für die schnellen Antworten!

    Ich werde das ganze mal ausprobieren und hoffe mal, dass es nicht auch zu 50% CPU-Auslastung führt :).

    MfG,
    X-Zat / Momo

    // Edit: Eine Bitmap zu erstellen funktioniert, auch einwandfrei, aber die CPU-Auslastung bleibt dieselbe :( Mal schauen, ob mir die Buffered Graphics weiterhelfen...
    - Nope, mit der BufferedGraphics-Klasse aus deinem Tutorial habe ich schon bei einer fast leeren Bitmap (nur weißer Hintergrund) eine Auslastung von 17%... Und bei einer vollen eine Auslastung von 50% wie bei meinem ursprünglichen und dem modifizierten Ansatz auch :/.
    Ich werde erstmal weiter mit der zusammengesetzten Bitmap arbeiten... Vielleicht kann ich ja irgendwie den CPU entlasten...

    Trotzdem vielen Dank für eure Hilfe!

    MfG,
    X-Zat / Momo

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „X-Zat“ ()

    Sorry für Doppelpost, aber ich habe mir gedacht, ich könne vielleicht einfach DirectX nutzen (habe damit noch nichts umgesetzt, aber schon 100x probiert), und bin auf mehrere Probleme gestoßen:

    1. Komischerweise werden meine Komponenten nicht initialisiert (Hab ich hier her)
    2. Den Fenstermodus kann ich nicht wirklich nutzen und das Tutorial sagt mir nüscht :( (Hab ich hier her)
    3. Ich habe keine Ahnung, wie ich wo und vorallem was welchem Objekt zum Zeichnen zuweise (immer nur eine Bitmap)...

    Source Code (Teil davon) im Anhang!

    Wäre super, wenn ihr mir vielleicht ein Tut für DirectX im Fenstermodus geben könntet, bin da ein wenig aufgeschmissen und Google liefert fast nur Müll :(

    MfG,
    X-Zat / Momo

    PS: Zum Source-Code - Ja, ich weiß, ich nutze keine ConsolenAnwendung, da ich nur 1 Form habe, auf der gezeichnet werden muss, im Fenster...
    Dateien
    • DX10DD.txt

      (4,71 kB, 267 mal heruntergeladen, zuletzt: )