Bitmap in übergröße?



  • Hi,

    ich baue mir grad nen Tilemap Editor.

    Ich habe ein Tile "Auswahlfenster"(PictureBox),
    Und eine große Map(PictureBox mit Bitmap + vertical,horizontalscrollbars)
    Setzen der Tiles usw. kein Problem.(mit g.Draw() bei klick rein zeichen.)

    http://img5.fotos-hochladen.net/uploads/editorbild2ohs3igktj.png

    So nun ab ner gewissen Bitmap größe ist Schluss... habs jetzt bei 9600x9600.

    Würds gern selbst bestimmen wie groß eine Map ist.

    Über Ideen,Vorschläge würd ich mich sehr freuen!



  • Was passiert denn, wenn du größere Bitmaps erzeugst?

    Aber eigentlich benötigst du überhaupt keine Bitmap. Es reicht, wenn du im Paint-Ereignis die Bitmaps (Tiles) selber zeichnest (du hast doch die Tiles als Array mit Indizes vorliegen, oder?), s.a. [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)

    Ich würde aber statt der PictureBox auch eher zu einem Panel raten (auch dieses unterstützt ScrollBars).

    Und mit Invalidate(Rectangle) kannst du dann einzelne Tiles sich neu zeichnen lassen (z.B. nach Klick und Setzen des Tiles).



  • Erstma vielen Dank für die hilfreiche Antwort.
    Bin gar nicht auf die Idee , direkt ins Panel zu zeichnen...

    Okay, ich hoffe ich habs richtig verstanden... sowas die richtung?
    Das wäre das Auswahlfenster :

    void Panel1_Paint(object sender, PaintEventArgs e)
            {
                int x = 0; int y = 0;int space = 3;
                Graphics g = e.Graphics;
                Bitmap tileBitMap;
                for (int i = 0; i < singleTileTextures.Count; i++ )
                {
                    tileBitMap = new Bitmap(singleTileTextures[i]);
                    g.DrawImage(tileBitMap, new Point(x, y));
                    x += tileSize + space;
                    if (x > splitContainer2.Panel1.Width) 
                    {
                        x = 0;
                        y += tileSize + space;
                    }
                    tileBitMap.Dispose();
                }
    
            }
    


  • Ja, so habe ich es gemeint.

    Aber warum erzeugst du hier wiederum intern neue Bitmaps? Sind 'singleTileTextures[i]' denn nicht schon Bitmaps (bzw. Images)?



  • singleTileTextures[i]
    

    sind die Dateinamen der Texturen,aus nem Ordner ausgelesen.
    (Hätte ich vielleicht besseren Namen geben können.)



  • Dann wäre es wohl besser, wenn du einmalig (quasi als Cache) die Tiles als Bitmap lädst (sollten ja nicht so viele sein, max. ein paar Dutzend ;-), evtl. sogar erst bei Bedarf (schreib dir dazu eine Klasse/Methode mit einem Dictionary<string, Bitmap> welche nachschaut ob es die Bitmap mit dem Dateinamen schon gibt, und wenn nicht dann lädt).

    Bei deinem bisherigen Ansatz würde ja eine Bitmap x-fach geladen werden (wenn gleiche Tiles benutzt werden).


Anmelden zum Antworten