Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Interpolacion RGB (https://www.clubdelphi.com/foros/showthread.php?t=61818)

Delphius 27-11-2008 02:21:07

1 Archivos Adjunto(s)
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:o. Pero ya que estoy, y lo tengo... quiero compartilo:).

Saludos,

Caral 27-11-2008 03:34:57

Hola
No dejo de aprender con el código de cHackAll, no dejas de impresionarme amigo.
Haciendo un poco de chapuzas quise que el color estuviese en el form completo, que cuando se amplie o reduzca el color haga lo mismo y que con un trackbar se pudiera cambiar, ademas de hacerlo que siga la linea del form, sin la inclinacion (bueno, metiendome en camisa de once varas:D)
Logre que se ampliara hacia abajo, que siguiera la linea del form y que cambiara el color con el trackbar (hace un efecto simpatico).
Lo que no me aclaro es como hacer que crezca completo cuando el form se amplia?.
Aqui tu codigo con estos detalles:
Código Delphi [-]
procedure TForm1.TrackBar1Change(Sender: TObject);
var Offset, Value, Index: Cardinal;
begin
 Offset := TrackBar1.Position;
 Value := 255;
 for Index := 0 to 255 * 3 do
  begin
   Canvas.Pen.Color := Value;
   Canvas.MoveTo(Index, 0);
   Canvas.LineTo(Index + 0, Form1.ClientHeight);
   Dec(PByte(Cardinal(@Value) + (Offset mod 3))^);
   Inc(PByte(Cardinal(@Value) + ((Offset + 1) mod 3))^);
   if ((Index + 1) mod 255) = 0 then
    Inc(Offset);
  end;
end;
Bueno, la pregunta es obvia: Como lo hago amigo?.
Saludos

cHackAll 27-11-2008 17:06:36

Código Delphi [-]
var Bitmap: TBitmap;
 
procedure TForm1.FormCreate(Sender: TObject);
var Offset, Value, Index: Cardinal;
begin
 Bitmap := TBitmap.Create;
 Bitmap.Width := 255 * 3;
 Bitmap.Height := 1;
 Offset := 0;
 Value := 255; // change this
 for Index := 0 to 255 * 3 - 1 do
  begin
   Bitmap.Canvas.Pixels[Index, 0] := Value;
   Dec(PByte(Cardinal(@Value) + (Offset mod 3))^);
   Inc(PByte(Cardinal(@Value) + ((Offset + 1) mod 3))^);
   if ((Index + 1) mod 255) = 0 then
    Inc(Offset);
  end;
end;
 
procedure TForm1.FormPaint(Sender: TObject); // OnPaint, OnResize
begin
 SetStretchBltMode(Canvas.Handle, COLORONCOLOR);
 StretchBlt(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, Bitmap.Canvas.Handle, 0, 0, 255 * 3, 1, SRCCOPY);
end;

Caral 27-11-2008 17:23:15

Hola
Muy bueno amigo.
Tengo otra duda, cuando el form se redimensiona, se queda marcado el form anterior, osea pintado encima, supongo que se tendria que borrar?.
Saludos

coso 27-11-2008 18:07:39

Hola Caral, con

Código Delphi [-]
procedure TForm1.OnResize(sender : TObject);
begin
     Paint;
end;

lo solucionas. Saludos.

Caral 27-11-2008 18:48:14

Hola
Muchas gracias Coso, ahora si.
Saludos


La franja horaria es GMT +2. Ahora son las 14:51:22.

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