Chciałem napisać program, w którym po naciśnięciu na jakiś obrazek kursor zmienia się na pipetę i trzymając wciśnięty przycisk myszki, przeciągając go w dowolne miejsce na ekranie zostanie wyświetlony jego kolor w TImage i w Edit pojawi się jego zapis w HEXach np #336699.
Nie mogę sobie z tym poradzić... :(
Może jakieś rady ?? :)
zmiana koloru na hex:
function ColorToHex(color: TColor): string;
var RGB: LongInt;
Red, Green, Blue: Integer;
begin
RGB := ColorToRGB(color);
Red := GetRValue(RGB);
Green := GetGValue(RGB);
Blue := GetBValue(RGB);
Result := IntToHex(Red,2) + IntToHex(Green,2) + IntToHex(Blue,2);
end;
Procedure TForm1.Button1Click (Sender : TObject);
begin
Label1.Caption := ColorToHex (clGreen);
end;
pobranie koloru spod kursora:
var
Color: TColor;
Point: TPoint;
Canvas: TCanvas;
begin
Canvas:=TCanvas.Create;
Canvas.Handle:=GetDC(0);
GetCursorPos(Point);
Color:=Canvas.Pixels[Point.x,Point.y];
Canvas.Destroy;
end;
O jezu,
dzięki stary bardzo !!! Już wszystko działa !!!
Super !!
Jeszcze raz dzięks... [hurra]
zmiana koloru na hex:
function ColorToHex(color: TColor): string;
var RGB: LongInt;
Red, Green, Blue: Integer;
begin
RGB := ColorToRGB(color);
Red := GetRValue(RGB);
Green := GetGValue(RGB);
Blue := GetBValue(RGB);
Result := IntToHex(Red,2) + IntToHex(Green,2) + IntToHex(Blue,2);
end;
Wszystko ładnie. A mnie interesuje czy ktoś wie jak pobrać dla danego koloru pobranego spod wspołrzędnej myszy takie wartości jak:
Odcień
Nasycenie
Jaskrawość ?
Pozdr//pepe
Witam,
Sądzę, że o to ci chodziło: Konwersja RGB na HSL i odwrotnie
( jest w FAQ)
http://4programmers.net/view_faq.php?id=228
Pozdrawiam
Moje funkcje, użyte w programie ColorWorkshop (dokładne, szybkie, krótsze niż te z FAQ i z ładniejszym formatowaniem kodu :)):
procedure HLStoRGB(const H,L,S: Single; var R,G,B: Single);
var
M1, M2: Single;
begin
if L<=0.5 then
M2:=L*(L+S)
else
M2:=L+S-L*S;
M1:=2.0*L-M2;
if S=0.0 then
begin
if IsNAN(H) then
begin
R := L;
G := L;
B := L;
end
else raise EException.Create('HLStoRGB: S=0 and H<>NAN');
end
else
begin
R:=Value(M1,M2,H+120.0);
G:=Value(M1,M2,H);
B:=Value(M1,M2,H-120.0)
end
end;
procedure RGBToHLS(const R,G,B: Single; var H,L,S: Single);
var
Delta, Max, Min: Single;
begin
Max:= MaxValue([R,G,B]);
Min:= MinValue([R,G,B]);
L:=(Max+Min)/2.0;
if Max=Min then
begin
S:=0.0;
H:=NAN;
end
else
begin
Delta:=Max-Min;
if L<=0.5 then
S:=Delta/(Max+Min)
else
S:=Delta/(2.0-(Max+Min));
if Max=B then
H:= 240.0 + (60.0*(R - G)) / Delta;
if Max=G then
H:= 120.0 + (60.0*(B - R)) / Delta;
if Max=R then
H := (60.0*(G - B)) / Delta;
if H < 0 then
H := H + 360.0;
end;
end;
Do tego jeszcze ta funkcja, sprawdzająca wartość nienumeryczną:
function IsNAN(const D: Double): Boolean;
var
Overlay: Int64 absolute D;
begin
Result:=((Overlay and $7FF0000000000000) = $7FF0000000000000) and
((Overlay and $000FFFFFFFFFFFFF) <> $0000000000000000)
end;
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.