Home » Tutorials » Grafik und Spiele » Bitmaps

Bitmaps

Pixel und Scanline

TCanvas.Pixels

Eine Methode, die Delphi für den Zugriff dieser Pixel bereitstellt, ist TCanvas.Pixels, der einfach die Koordinaten des auzulesenden Pixels übergeben werden. Zum Beispiel

Form1.Color:= aBitmap.Canvas.Pixels[0,0];

färbt das Formular in der Farbe des oberen linken Pixels eines Bitmaps.
Will man jedoch von einem größeren Bitmap jedes Pixel auslesen und sogar verändern, wird man schnell einsehen, dass diese Methode sehr langsam ist.

TBitmap.ScanLine

Eine schnellere Methode zum Zugriff auf die Pixel stellt seit Delphi 3 die Bitmap-Methode ‚ScanLine‘ dar. Dieser Methode wird der Zeilenindex der auszulesenden Pixelzeile übergeben und liefert als Rückgabewert einen Zeiger auf die Zeile. Allerdings enthält nun jede Zeile dreimal soviele Werte, wie es die Breite des Bitmaps vermuten lassen würde, denn jedes Pixel wird durch einen Rot-, einen Grün- und einen Blauwert vom Typ Byte dargestellt. Dabei ist die Reihenfolge der Farbwerte pro Pixel genau umgedreht: Blau – Grün – Rot.
Während ich mit ScanLine experimentiert habe, habe ich gemerkt, dass es nicht bei jedem Bild zu dem gleichen Ergebnis führt. Das war für mich Anfangs etwas verwirrend, denn ich wusste noch nicht, dass jedes Bitmap ein eigenes Pixelformat besitzt. Auf jeden Fall ist das ideale Pixelformat für die Bearbeitung mit ScanLine 24Bit, deshalb sollte man jedesmal, nachdem im Programm ein Bild geladen wurde, sicherstellen:

MyBitmap.PixelFormat:= pf24Bit;

Ansonsten kann es mit ScanLine zu unangenehmen Überraschungen kommen.