Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 22-08-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 28
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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como puedo medir la distancia de dos puntos (pixeles) ? JuanErasmo Gráficos 1 14-12-2007 00:54:35
Obtener unos datos de una bbdd pennylane SQL 6 08-02-2007 13:32:02
Como enviar unos edit.text a un reporte de Rave Bairon Kumon Impresión 0 07-06-2006 22:56:30
Como manipular los pixeles la matriz de valores en una imagen en escala de grises erocha Gráficos 4 30-11-2003 06:20:32
obtener filas que contienen unos datos y no contienen otros datos Angel Firebird e Interbase 14 10-06-2003 10:11:23


La franja horaria es GMT +2. Ahora son las 16:12:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi