2010-03-12 12 views

Respuesta

6

Debe ser la misma:

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

Si usted está buscando algo que se comporta mejor que GetPixel/Canvas.Pixel [] que debe salir Bitmap.ScanLine. El único problema es que los datos pueden organizarse de varias formas, determinadas por Bitmap.PixelFormat

0

La función GetPixel es muy ¡lento! Si necesita un rendimiento alto (o incluso aceptable), debe usar la propiedad ScanLine. ScanLine [y] es un puntero a la línea yth de píxeles en el mapa de bits, codificado en el formato especificado por la propiedad PixelFormat. Por ejemplo, para un mapa de bits de 24 bits, la línea tiene el formato

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

si el ancho del mapa de bits es n. Bi, Gi y Ri son las intensidades azul, verde y roja del píxel i, respectivamente, como bytes.

+0

¿Puedo preguntar qué pasa con mi argumento? –

+0

@Ritsaert: ¿Estás seguro? Acabo de crear un pequeño archivo BMP lleno de (R, G, B) = (0xFF, 0, 0) y lo miré en la memoria. Ver http://privat.rejbrand.se/hex.png. El byte resaltado es el primer byte de la primera línea de exploración. Para mí, parece que los bytes van BBGGRRBBGGRR ... –

+0

Estoy avergonzado. Estás en lo correcto. El formato para los mapas de bits de 24 bits está en orden BGR. –