Ver Mensaje Individual
  #15  
Antiguo 23-10-2012
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
Si dices que puedes asociar cada punto (X,Y) con el pixel (X,Y) de la imagen no debiera de ser problemas entonces de pintar dicho pixel.

Si buscas sobre Scanline() encontrarás varios hilos con muestras de código, Con ScanLine() te puedes posicionar en una fila determinada de la imagen. De hecho ScanLine() regresa un puntero al primer elemento de dicha fila. Ahora para moverse sobre las "columnas" basta con incrementar dicha cantidad de veces el puntero para acceder a dicho pixel en cuestión.

Por ejemplo: acceder al pixel (14, 50):

Código Delphi [-]
p := Picture.Bitmap.Scanline(14);
inc(p,50);

Ahora en el puntero p estamos en (14,50), recordando que en realidad el sistema de coordenadas en una imagen es (columna, fila).

Para pintar el pixel, si el formato es de 24bits (RGB) entonces:

Código Delphi [-]
p^[0] := tono_rojo;
p^[1] := tono_verde;
p^[2] := tono_azul;

Siendo tono_x un valor comprendido entre [0,255]. En lo que estoy dudando es si 0 correspondía al rojo o al azul. No estoy con delphi ahorita como para comprobar.

Tu problema es tu falta de criterio en determinar que color asociar a cada posible valor de Z. Naturalmente en última se resumirá en hacer alguna forma de relacionar el rango [Z-menor, Z-mayor] con el rango [color-min, color-max]. Pero no te podemos ayudar en eso... es algo que tu debes definirlo. Si tu idea es pintar un mapa con colores que distingan los niveles de precipitaciones debes entonces tu mismo definir que colores... Los colores habituales que usan la mayoría es verde, amarillo, naranja, rojo. y asocian entonces a cada uno ciertos rangos que estén entre los máximos y mínimos.

Como ves, eso ya no es cosa nuestra. sino tu falta de comprensión de como componer un color. Como he dicho: revisa los foros sobre Scanline(), y ni que decir... ¡estudia algo sobre RGB! El rojo se forma con (255,0,0) mientras que verde es (0,0,255), amarillo es (255,0,255) por mencionar algunos.

Si accedes mediante Scanline() debes descomponer la imagen en sus componentes RGB para formar el color... si accedes mediante Pixels[] lo accedes de forma numérica, el tipo cardinal para ser exacto, y no hay que "descomponerlo". Lee la ayuda sobre Pixels[].... básicamente el rango de cardinal se hace corresponder a los posibles colores... está pensado de modo tal que en su representación hexadecimal sea $RRGGBB.
Se recomienda ScanLine() por sobre Pixels ya que es más rápido, sobre todo en imágenes enormes.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 23-10-2012 a las 00:08:19.
Responder Con Cita