Ver la Versión Completa : Un pixel en Timage
Cecilio
16-02-2009, 14:23:02
Hola.
Estoy intentando obtener el código de color de un pixel en una imagen cargada con Timage.
La idea que tengo es guardar x pixeles por cada imagen para saber si se ha suplantado la imagen y tambier para buscar repeticiones en una carpeta.
He visto que el pixel se lee así:
var i: Tcolor;
i:= Image1.Picture.Bitmap.Canvas.Pixels[10,10];
¿ pero como se maneja Tcolor ?
Los pos que he encontrado no me han aclarado mucho.
Gracias.
Crandel
16-02-2009, 14:52:58
TColor esta definido como numeros enteros de 4 bytes.
Por lo que puedes usarlo como cualquier valor entero, asignarle valores en ese rango, comparar, etc.
Supongamos que tienes una imagen en cada TImage, puedes hacer:
var
color1, color2: Tcolor;
begin
color1 := Image1.Picture.Bitmap.Canvas.Pixels[10,10];
color2 := Image2.Picture.Bitmap.Canvas.Pixels[10,10];
if color1 = color2 then
...
end;
Cecilio
16-02-2009, 15:54:39
Muchas gracias por la aclaración.
Pensaba que podría llevar los componentes separados rgb, brillo y otros datos.
El rgb va compatado, y poco más.
Delphius
16-02-2009, 17:38:38
La otra opción es emplear el método Scanline(). Con éste método se consigue un acceso más rápido que con Pixels[]. El problema es que requiere un poquito más de código.
Cuando llamas a ScanLine() debes indicar la "fila" sobre la cual deseas evaluar.
Luego, debes posicionarte sobre la "columna" de dicha fila.
ScanLine() regresa la dirección de memoria donde comienza la j-ésima fila, por lo que se necesita un puntero para almacenar el valor, luego es posible moverse de a 3 posiciones y de este modo conseguir ir pixel a pixel.
Básicamente lo que se hace es posicionarse en el pixel [i,j] en dos pasos:
1. Ir a la fila j-ésima.
2. Interar i veces, 3 lugares sobre la fila j-ésima.
Lo bueno de este método es que se consigue leer los valores RGB de un pixel, y te evitas tener que estar realizando conversión de TColor a RGB.
Si buscas sobre ScanLine encontrarás hilos con ejemplos de uso;).
OJO: esto aplica a bitmaps.
Saludos,
Cecilio
16-02-2009, 19:10:00
Delphius Muy interesante, no lo sabía, lo usaré en otras ocasiones.
Para este caso usaré los pixel ya que no van aser más de 5 repartidos por la imagen.
pero se agradece la idea.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.