Ver Mensaje Individual
  #5  
Antiguo 22-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita