Hola waly2k1,
Además Pixels[], cuentas con ScanLine() que permite leer "linea por línea" una imagen.
ScanLine es mucho más rápido que el Pixels[]. Cuanto más grande sea la imagen, más se lento se hará, si bien es imperceptible a nuestros ojos.
Si estás pensando en tener un cuenta gotas y quieres hacer cálculos con los valores RGB lo mejor es contar con ScanLine; sobre todo si se debe examinar pixeles vecinos.
Veamos como te explico. Una imagen es una matriz, tiene un largo y un ancho.
Código:
+---------+---------+ ...
|255255255|255255255| ...
+---------+---------+ ...
|255255255|255255255| ...
+---------+---------+ ...
Si accedemos mediante Pixel veríamos una cosa así:
Código:
+---------+
|255255255|
+---------+
Cada celda es un pixel y tiene un tamaño de 24 bits. El asunto es obtener las correspodencia RGB. Coso te lo facilitó. La idea es que esos 24 bit se dividen en tres: 8 para el Rojo, otros 8 para el Verde y los otro 8 para el Azul. Cada canal puede asumir un valor "decimal" entre 0 y 255.
Si leemos con ScanLine(), obtenemos esto:
Código:
+-----------+-----------+ ...
|255|255|255|255|255|255| ...
+-----------+-----------+ ...
Si te fijas, se consigue tener acceso a toda una línea, y no sólo eso: ahora tenemos separado los valores RGB, nada de conversiones solo hay que leelo.
Lo que se obtiene con ScanLine es un puntero al primer pixel. Si queremos ir a un pixel n-ésimo en la fila habrá que incrementar el valor de dicho puntero n veces de a 3. Es decir: n * 3. ¿Por qué ese 3? Ese 3 corresponde a la cantidad de canales: rojo, verde, azul.
Cuando nos posicionamos en el lugar adecuado, tenemos entonces en el puntero ya lo valores:
Código Delphi
[-]Rojo := RGB^[1];
Verde := RGB^[2];
Azul := RGB^[3];
Siendo RGB un "vector puntero" de 3 posiciones.
Si buscas sobre ScanLine() vas a encontrar ejemplos de como usarlo.
Saludos,