Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmaps intern als Arrays verwalten (https://www.delphipraxis.net/141595-bitmaps-intern-als-arrays-verwalten.html)

Boom3 12. Okt 2009 10:24


Bitmaps intern als Arrays verwalten
 
Hallo,

ich schreibe mir gerade ein Programm zum Zeichnen. Als Zeichenfläche verwende ich eine PaintBox.
Da ich mit verschiedenen Ebenen arbeiten möchte, die ich später im OnPaint-Ereignis in die PaintBox laden möchte, arbeite ich mit Bitmaps.

Jedoch ist das Zeichnen auf Bitmaps ziemlich langsam.. deshalb habe ich mir überlegt die Ebenen(Bitmaps) intern als dynamische Arrays zu verwalten.

Welche Art von Array würde sich da anbieten?
Wie bekomme ich das Array später wieder ein eine Bitmap "konvertiert"?


Beste Grüße

Tyrael Y. 12. Okt 2009 10:30

Re: Bitmaps intern als Arrays verwalten
 
Ein Bitmap ist doch selbst eine Art Array...
Deshalb kann man ja auch so schön Scanline machen.

Ich verstehe nicht, was du mit einem Array sparen willst?
Du solltest eher wohl Scanline öfter im Code verwenden.

Boom3 12. Okt 2009 10:51

Re: Bitmaps intern als Arrays verwalten
 
Ja, Scanline verwende ich bisher auch.
Aber ich möchte auch einzelne Pixel einfärben können z.B. beim Zeichnen mit einem Stift. Und da ich in meiner internen Datenstruktur der Geschwindigkeit halber ohne Canvas auskommen wollte würden sich dynamische Arrays anbieten. Da man dort auch die einzelnen Pixel direkt setzen könnte.

himitsu 12. Okt 2009 10:58

Re: Bitmaps intern als Arrays verwalten
 
Einzelne Pixel kann man auch via ScanLine setzen.

Jede Linie ist nur ein Array aus den Pixeln der entsprechenden Zeile.

.Pixels ist dagegen wirklich verdamt langsam ... warum auch immer.

Blup 12. Okt 2009 14:30

Re: Bitmaps intern als Arrays verwalten
 
Zitat:

Zitat von Boom3
Jedoch ist das Zeichnen auf Bitmaps ziemlich langsam.. deshalb habe ich mir überlegt die Ebenen(Bitmaps) intern als dynamische Arrays zu verwalten.

Wenn das Zeichnen auf Bitmaps langsam ist, machst du irgend etwas falsch.

Zitat:

Zitat von Boom3
Welche Art von Array würde sich da anbieten?

Da Delphi keine mehrdimensionalen dynamischen Arrays unterstützt (nur Array of Array), würde ich dafür eine eigene Klasse erzeugen, die den Speicher für die Pixel intern verwaltet und für den entsprechenden Index(x,y,z) einen Pointer auf das Pixel ermitteln kann.

Zitat:

Zitat von Boom3
Wie bekomme ich das Array später wieder ein eine Bitmap "konvertiert"?

Dafür gibts ScanLine.

Medium 12. Okt 2009 14:34

Re: Bitmaps intern als Arrays verwalten
 
Zitat:

Da Delphi keine mehrdimensionalen dynamischen Arrays unterstützt (nur Array of Array)
...öhm, hä? :gruebel:


Und bevor du anfängst Bitmaps in Arrays zu konvertieren, ein paar Pixel änderst und die ganze Suppe wieder zurück: Scanline. Und NUR das. Keine Arrays. Schneller als mit Scanline geht's nicht, da du direkt über einen Pointer in die "rohen" Bitmap-Daten greifst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz