Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-11-2008
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 20
JF Sebastian Va por buen camino
Muy buenas aportaciones, companeros.

Os dejo otra solucion que encontre por ahi y que permite interpolar facilmente y obtener el color deseado...



implementation
{$R *.dfm}
uses math;
Código Delphi [-]
 
procedure TForm1.FormClick(Sender: TObject);
var i: integer; R,G,B: byte; cl:TColor;
begin
  for i := 400 to 750 do
  begin
    WavelengthToRGB(1.0*i,R,G,B);
    cl := rgb(r,g,b);
    Canvas.Pen.Color := cl;
    Canvas.Moveto(i-300,0);
    Canvas.LineTo(i-300,100);
  end;
end;
 
procedure TForm1.WavelengthToRGB(const Wavelength:  double; var R,G,B: byte);
const
  Gamma        =   0.80;
  IntensityMax = 255;
var
  Blue   :  double;
  factor :  double;
  Green  :  double;
  Red    :  double;
  function Adjust(const Color, Factor: double):integer;
  begin
    if   Color = 0.0
    then result := 0
    else result := round(IntensityMax * Power(Color * Factor, Gamma))
  end;
begin
  case trunc(Wavelength) OF
    380..439: begin
        Red   := -(Wavelength - 440) / (440 - 380);
        Green := 0.0;
        Blue  := 1.0
    end;
    440..489: begin
        Red   := 0.0;
        Green := (Wavelength - 440) / (490 - 440);
        Blue  := 1.0
    end;
    490..509: begin
        Red   := 0.0;
        Green := 1.0;
        Blue  := -(Wavelength - 510) / (510 - 490)
    end;
    510..579: begin
        Red   := (Wavelength - 510) / (580 - 510);
        Green := 1.0;
        Blue  := 0.0
    end;
    580..644: begin
        Red   := 1.0;
        Green := -(Wavelength - 645) / (645 - 580);
        Blue  := 0.0
    end;
    645..780: begin
        Red   := 1.0;
        Green := 0.0;
        Blue  := 0.0
    end;
    else
      Red   := 0.0;
      Green := 0.0;
      Blue  := 0.0
  end;
  case trunc(Wavelength) of
    380..419:  factor := 0.3 + 0.7*(Wavelength - 380) / (420 - 380);
    420..700:  factor := 1.0;
    701..780:  factor := 0.3 + 0.7*(780 - Wavelength) / (780 - 700)
    else       factor := 0.0
  end;
  R := Adjust(Red,   Factor);
  G := Adjust(Green, Factor);
  B := Adjust(Blue,  Factor)
end;
Responder Con Cita
  #2  
Antiguo 26-11-2008
JF Sebastian JF Sebastian is offline
Miembro
 
Registrado: oct 2006
Posts: 108
Poder: 20
JF Sebastian Va por buen camino
Que inutil soy
Responder Con Cita
  #3  
Antiguo 27-11-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
Estuve pensando en mi idea, y me dije... ummm no se si sería muy vistoso el efecto conseguido.

Y bueno, hice un código... lo puse a prueba y la verdad es que los colores como que no eran los adecuados (tal vez estuve haciendo mal los cálculos con seno y coseno). Luego me dije... para ir de rojo al azul, manteniendo constante un tono de verde, lo más fácil y "vistoso" es simplemente una transformación lineal.

Y es así como me dije que si "x" es el valor del canal Red, "z" es el del canal Blue... entonces se puede ir decrementando el valor de x en una proporción constante "delta" y en la misma medida aumentar el valor de z. Básicamente es esto: (x,y,255 - x) para todo x = 255..0

Y bueno... fue así que se me ocurrió ponerlo a prueba. Me tomé unos minutos anoche y lo hice. He preparado una demostración un tantito chula de mi teoria... y la adjunto aqui.

Pero como hoy he estado ocupado todo el día, vengo y me encuentro esto... tal vez mi idea no sirva de mucho. Pero ya que estoy, y lo tengo... quiero compartilo.

Saludos,
Archivos Adjuntos
Tipo de Archivo: zip MuestraColor.zip (3,8 KB, 38 visitas)
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Ampliar imagen o parte de ella - Interpolacion Lineal Delphius Gráficos 11 27-01-2007 04:00:45


La franja horaria es GMT +2. Ahora son las 10:40:00.


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