Himitsu hat absolut Recht. Es ist dabei wurscht warum das Windows so macht, wichtig sind zwei Punkte
1.) es ist eine blödsinnige Speicherorganisation die für heutige Verhältnisse unbegründet ist. Früher hatte das mal einen sinnvollen Grund.
2.) es ist so das der Linksoben Pixel also im Speicher Linksunten gespeichert ist und ScanLine[Height-1] also die oberste Pixelzeile addressiert. Dabei geht es mir hier NICHT darum das die Indizierungen von ScanLine[] als Array[] durch die
VCL intern schon den Speicher korrekt adressiert, sondern um die Fragestellung wie ein Zeiger auf die Pixeldaten inkerementiert werden muß und mit welcher ScanLine[] wir auf den Begin dieses Speichers zugreifen. Denn das virtuelle Umrechnen über ScanLine[] mcht nur dann Sinnn wenn man die Bitmap zeilenweise abarbeitet und dabei über ScanLine[] immer den zeiger neu holt. Dies ist aber in der Performance sehr ineffizient da der Canvas bem Zugriff auf ScaneLine einiges an zusätzlichen Code intern abarbeitet. Besser ist es nur einmalig einen Zeiger auf die Erste Zeile der Bitmap zu holen und diesen Zeiger dann auch Zeilenweise zu inkrementieren. Exakt in diesem Moment ist es wichtig zu wissen das man mit ScanLine[0] eben an das Ende des Speichers der Pixeldaten positioniert und dieser Zeiger im Verlauf des Algos. also dekrementiert werden muß.
Das und nichts anderes sollte mein Posting anmerken !
Gruß Hagen