Hola,
Recuerdo que buscando en el foro encontré hace tiempo un post donde explicaban la forma de realizar un degradado, me sirvió de mucho, hoy hice nuevamente esa búsqueda y no tuve suerte (pues no deseaba abrir otro hilo). Y bien, he implementado ese código para capturar el color con el mouse con el código de abajo en un TPanel:
Código Delphi
[-]
var
Form1: TForm1;
IsScanning: Boolean;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
h,s,b: integer; i,j: integer;
x,y,z: integer;
begin
IsScanning := False;
Image1.Picture.Bitmap.Width:= 360;
Image1.Picture.Bitmap.Height:= 256;
with Image1.Canvas do
begin
Brush.Color:= clBlack;
FillRect(ClipRect);
b:= 255; for h:= 0 to 359 do
begin
i:= ((h mod 60) * b) div 60;
j:= b - i;
for s:= 0 to 255 do
begin
x:= i + ((b-i) * s) div 255;
y:= j + ((b-j) * s) div 255;
z:= (b * s) div 255;
case (h div 60) of
0: Pixels[h,s]:= RGB(b,x,z);
1: Pixels[h,s]:= RGB(y,b,z);
2: Pixels[h,s]:= RGB(z,b,x);
3: Pixels[h,s]:= RGB(z,y,b);
4: Pixels[h,s]:= RGB(x,z,b);
5: Pixels[h,s]:= RGB(b,z,y);
end;
end;
end;
end;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsScanning := True;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsScanning := False;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Clr: TColor;
begin
If IsScanning = True Then
begin
Clr := Image1.Canvas.Pixels[X, Y];
edtRed.Text:= IntToStr(GetRValue(Clr));
edtGreen.Text:= IntToStr(GetGValue(Clr));
edtBlue.Text:= IntToStr(GetBValue(Clr));
pnlPreview.Color := Clr;
Edit1.Text:=ColorToString(Clr); end
end;
end.
Bueno la Aplicación funciona bien, solo que el degradado que se dibuja de izquierda a derecha: Rojo, Naranja , Amarillo, Verde, Cyan, Azul, Violeta y Rojo y en la parte inferior todo blanco (lo pueden probar) al recorrer el mouse tanto en la parte inferior el BLANCO como en la derecha el ROJO en mi TPanel (pnlPreview) no me captura estos colores y me muestra otros diferentes, pues Yo necesitaba capturar aquellos colores que a vista se ven en el degradado construido y cargado en la TIMage (con los otros colores no tengo el problema, solo con esos extremos)
¿A que se debe todo ello? ¿Como capturo por favor el blanco de la parte inferior o el color verdadero de la derecha del degradado?