2010-03-12 19 views

Antwort

6

Es sollte die gleiche sein:

function TCanvas.GetPixel(X, Y: Integer): TColor; 
begin 
    RequiredState([csHandleValid]); 
    GetPixel := Windows.GetPixel(FHandle, X, Y); 
end; 
4

Wenn Sie nach etwas suchen, der besser abschneidet als GetPixel/Canvas.Pixel [] Sie Bitmap.ScanLine sollten überprüfen. Das einzige Problem ist, dass die Daten auf verschiedene Arten angeordnet werden können, bestimmt durch Bitmap.PixelFormat

0

Die GetPixel-Funktion ist sehr langsam! Wenn Sie eine hohe (oder sogar akzeptable) Leistung benötigen, sollten Sie die ScanLine-Eigenschaft verwenden. ScanLine [y] ist ein Zeiger auf die y-te Pixelzeile in der Bitmap, die in dem von der PixelFormat-Eigenschaft angegebenen Format codiert ist. Zum Beispiel für einen 24-Bit-Bitmap weist die Linie, die das Format

B1 B2 G1 R1 R2 G2 ... Gn Bn Rn

wenn die Breite des Bitmaps n ist. Bi, Gi und Ri sind die Blau-, Grün- und Rot-Intensitäten von Pixel bzw. als Bytes.

+0

Darf ich fragen, was mit meinem Argument falsch ist? –

+0

@Ritsaert: Bist du sicher? Ich habe gerade eine kleine BMP-Datei erstellt, die mit (R, G, B) = (0xFF, 0, 0) gefüllt war und sie im Speicher betrachtet. Siehe http://privat.rejbrand.se/hex.png. Das markierte Byte ist das erste Byte der ersten Scanzeile. Für mich sieht es sicher aus wie die Bytes gehen BBGGRRBBGGRR ... –

+0

Ich schäme mich. Du hast Recht. Das Format für die 24-Bit-Bitmaps ist in BGR-Reihenfolge. –