Tastaro hat folgendes geschrieben : |
Eine Grafik war 3.800 Pixel breit und 250.000 Pixel hoch. Nach etwas Multiplikation kam ich dann auf 950.000.000 Pixel. Bei 4 Byte pro Pixel käme ich auf ca. 4 GB. Tatsächlich belegt die Grafik aber "nur" 650 MB im RAM, was mich sehr verwundert. |
Vermutlich hast du hast das Konzept nicht verstanden. Eine PaintBox speichert keine Daten, sie stellt lediglich einen Canvas zur Verfügung.
Der Canvas selbst kapselt einen Gerätekontext der GDI, ein Treiber der als Ausgabe dient.
Es werden lediglich Zeichenbefehle und die dazu nötigen Daten an das Gerät übermittelt.
Welche Farbtiefe zur Verfügung steht, wie die Zeichenbefehle umgesetzt werden, welche Daten das Gerät puffert, bleibt dem Treiber überlassen.
Ist das Gerät z.B. ein Drucker, kann man die gezeichneten Pixel bei vielen Treibern überhaupt nicht auslesen.
Für den Canvas ist eine Region festgelegt, die den Ausgabebereich einschränkt (siehe ClipRect), z.B. auf den sichtbaren Bereich deines Fenster.
Der Buffer wird also nie größer sein, als dieser Bereich.
Für deine Grafik brauchst du nicht unbedingt eine riesige Bitmap. Es genügt wenn du dir die Objekte und deren Position merkst z.B.
Leitung(x1, y1, x2, y2)
Diode (x1, y1, x2, y2)
Schalter(x1, y1, x2, y2, aus)
usw.
Im OnPaint des Canvas zeichnest du alle Objekte, die innerhalb von ClipRect liegen.