myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grafik und Sound » Performance-Problem bei aus Quadraten gezeichnetem Raster
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Performance-Problem bei aus Quadraten gezeichnetem Raster

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Urganot Urganot ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.03.2014
Beiträge: 2
Herkunft: 127.0.0.1


Urganot ist offline

Performance-Problem bei aus Quadraten gezeichnetem Raster

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

Ich brauche für mein Projekt ein 50x50 Raster. Momentan löse ich dies, indem ich 2500 kleine Quadrate zeichnen lasse. Das funktioniert auch einigermaßen.

Das Problem ist, wenn ich die Fenstergröße ändere. Dann soll sich die Größe der Quadrate ändern. Das berechnen ist kein Problem.

Zusätzlich bekomme ich Probleme mit der Performance, wenn sich viel schnell ändert.

Kann mir jemand ne Idee geben, wie ich das Raster anders Umsetzen kann? Das wichtige: Wenn ich auf ein Feld des Rasters klicke, muss ich erkennen können, in welches Feld geklickt wurde.

Wenn das die einzige möglichkeit ist, wie kann ich die alten grafiken löschen?

Main Code:

C#-Code:
     int kachelgroesse = 10, kachel_zahl = 50;
            Graphics graph = this.CreateGraphics();
            label1.Text = ClientRectangle.Width.ToString();

            for (int u = 0; u < kachel_zahl; u++)
            {
                for (int i = 0; i < kachel_zahl; i++)
                {
                    graph.DrawRectangle(new Pen(Brushes.Black, 1), 200 + i * kachelgroesse, menuStrip1.Bottom + u*kachelgroesse, kachelgroesse, kachelgroesse);
                }
            }
Neuer Beitrag 18.03.2014 12:26 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.014


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nicht jedes mal einen neuen Pen erzeugen sondern den gleichen verwenden. Stichwort using.

Statt 2500 Quadraten reicht es wenn du 50 senkrechte und 50 waagrechte Linien zeichnest.

Zitat:
Wenn ich auf ein Feld des Rasters klicke, muss ich erkennen können, in welches Feld geklickt wurde.

Das kannst du doch an der Klickposition ausrechnen.

Zitat:
Wenn das ...

was?

Zitat:
wie kann ich die alten grafiken löschen?

welche?

Nächstes mal bitte noch überlegen ob jemand der dein Projekt nicht kennt (also alle) deinen Text wirklich verstehen kann.


Wann zeichnest du das immer? Dir würde vielleicht ein Bild helfen in das du einmalig alles einzeichnest, statt in jedem OnPaint.
Neuer Beitrag 18.03.2014 12:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.213
Herkunft: Leipzig


MrSparkle ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi Urganot,

wenn du ein Raster erstellst, solltest du Linien anstatt Quadrate zeichnen. So reduzierst du die Anzahl der aufgerufenen Zeichenfunktionen und verhindest, daß die Rasterlinien doppelt gezeichnet werden.

Als Beispiel mal angenommen, deine 2500 Quadrate sind in 50 Reihen und 50 Spalten angeordnet, dann ergeben sich 51 x 51 Rasterlinien. Wenn du die Linien anstatt der Quadrate zeichnest, benötigst du also nur 102 Zeichenoperationen anstatt wie bisher 2500.

Allerdings solltest du nicht CreateGraphics verwenden, sondern so vorgehen wie es in  [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) beschrieben wird.

In welches Feld geklickt wurde, solltest du relativ einfach über das Koordinatensystem des Rasters berechnen können.

Christian
Neuer Beitrag 18.03.2014 12:38 Beiträge des Benutzers | zu Buddylist hinzufügen
Urganot Urganot ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.03.2014
Beiträge: 2
Herkunft: 127.0.0.1

Themenstarter Thema begonnen von Urganot

Urganot ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

OK, danke Ich versuchs mal mit Linien
Neuer Beitrag 18.03.2014 12:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
zommi zommi ist männlich
myCSharp.de-Mitglied

avatar-2617.png


Dabei seit: 14.11.2007
Beiträge: 1.361
Entwicklungsumgebung: VS 2005+2010
Herkunft: Berlin


zommi ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hey Urganot,

eine sehr performante Variante sollte sein:

1) kleines Bild vorbereiten, das nur ein einziges "Kästchen" zeigt. (wobei aber nur links+oben der Gitterrahmen oder unten+rechts zu sehen sein sollte, da er sonst doppelt so breit wird)
2) Das als Hintergrundbild zuweisen
3) yourControl.BackgroundImageLayout = ImageLayout.Tile; setzen

beste Grüße
zommi

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von zommi am 18.03.2014 15:43.

Neuer Beitrag 18.03.2014 15:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Jahre.
Der letzte Beitrag ist älter als 5 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 13.11.2019 15:47