|
Registriert seit: 2. Mai 2005 7 Beiträge |
#1
An dieser Stelle ein großes Danke, an alle, die mitgeholfen haben. Vielleicht hilft ja der Code auch irgendwem.
Da ich keine Umrechnung von HLS in HSI und umgekehrt gefunden habe, musste ich improvisieren: Möglich waren folgende Umrechnungen:
Daraus ergibt sich die Umrechnung von HLS in HSI:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls, Math; type TForm1 = class(TForm) ScrollBar1: TScrollBar; ScrollBar2: TScrollBar; ScrollBar3: TScrollBar; ScrollBar4: TScrollBar; ScrollBar5: TScrollBar; ScrollBar6: TScrollBar; ScrollBar7: TScrollBar; ScrollBar8: TScrollBar; ScrollBar9: TScrollBar; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; RGB_R: TLabel; RGB_G: TLabel; RGB_B: TLabel; HLS_H: TLabel; HLS_L: TLabel; HLS_S: TLabel; HSV_H: TLabel; HSV_S: TLabel; HSV_V: TLabel; Farbfeld: TShape; procedure RGB(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); procedure HLS(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); procedure HSV(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); procedure ScrollBarChange(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Label1: TLabel; implementation {$R *.DFM} //--------------------------------------- //-----------------RGB------------------- //--------------------------------------- procedure TForm1.RGB(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); var RGB_R, RGB_G, RGB_B : Real; HLS_H, HLS_L, HLS_S : Real; HSV_H, HSV_S, HSV_V : Real; max_Farbwert : real; min_Farbwert : real; Differenz : real; Summe : real; RGB_R_temp1, RGB_G_temp1, RGB_B_temp1 : Real; RGB_R_temp2, RGB_G_temp2, RGB_B_temp2 : Real; HLS_H_temp, HLS_L_temp, HLS_S_temp : Real; HSV_H_temp, HSV_S_temp, HSV_V_temp : Real; begin RGB_R_temp2:=0; RGB_G_temp2:=0; RGB_B_temp2:=0; RGB_R := Scrollbar1.Position; RGB_G := Scrollbar2.Position; RGB_B := Scrollbar3.Position; max_Farbwert := max(RGB_R, max(RGB_G,RGB_B)); min_Farbwert := min(RGB_R, min(RGB_G,RGB_B)); Differenz := max_Farbwert - min_Farbwert; Summe := max_Farbwert + min_Farbwert; //Berechnung RGB-->HLS RGB_R_temp1:=RGB_R/255; RGB_G_temp1:=RGB_G/255; RGB_B_temp1:=RGB_B/255; HLS_L:=((max_Farbwert+min_Farbwert)/2); if min_Farbwert=max_Farbwert then begin HLS_H:=0; HLS_S:=0; end; if (((RGB_R = 0) and (RGB_G = 0) and (RGB_B = 0)) or ((RGB_R = 255) and (RGB_G = 255) and (RGB_B = 255))) then begin if ((RGB_R = 0) and (RGB_G = 0) and (RGB_B = 0)) then begin HLS_L := 0; HLS_S := 0; HLS_H := 0; end; if ((RGB_R = 255) and (RGB_G = 255) and (RGB_B = 255)) then begin HLS_L := 255; HLS_S := 0; HLS_H := 0; end; end else begin if ((min_Farbwert <> max_Farbwert)) then begin if (HLS_L < 50) then HLS_S:=abs((max_Farbwert-min_Farbwert)/(max_Farbwert + min_Farbwert)); if (HLS_L >= 50) then HLS_S:=abs((max_Farbwert-min_Farbwert)/(2-max_Farbwert-min_Farbwert)); RGB_R_temp2 := (RGB_R-min_Farbwert)/(max_Farbwert-min_Farbwert); RGB_G_temp2 := (RGB_G-min_Farbwert)/(max_Farbwert-min_Farbwert); RGB_B_temp2 := (RGB_B-min_Farbwert)/(max_Farbwert-min_Farbwert); if (RGB_R=max_Farbwert) then HLS_H:= (RGB_G_temp2-RGB_B_temp2); if (RGB_G=max_Farbwert) then HLS_H:=2+(RGB_B_temp2-RGB_R_temp2); if (RGB_B=max_Farbwert) then HLS_H:=4+(RGB_R_temp2-RGB_G_temp2); end; if not((RGB_R=RGB_G) and (RGB_R=RGB_B)) then HLS_H:=(HLS_H+2)*60; if (HLS_H<0) then HLS_H:=(HLS_H+360); if (HLS_H>360) then HLS_H:=(HLS_H-360); end; HLS_L:=HLS_L*100/255; HLS_S:=HLS_S*100; scrollbar4.Position := round(HLS_H); scrollbar5.Position := round(HLS_L); scrollbar6.Position := round(HLS_S); Farbfeld.Brush.Color:=StrToInt('$'+((inttohex(scrollbar3.Position,2)+ //Blau-Anteil inttohex(scrollbar2.Position,2)+ //Grün-Anteil inttohex(scrollbar1.Position,2)))); // Rot-Anteil //Berechnung RGB-->HSV RGB_R := Scrollbar1.Position; RGB_G := Scrollbar2.Position; RGB_B := Scrollbar3.Position; HSV_V := max_Farbwert/2.55; if (max_Farbwert = 0) then HSV_S := 0; if (max_Farbwert > 0) then HSV_S := (max_Farbwert - min_Farbwert) / 2.55; if (HSV_S = 0) then HSV_H:=0; if (((max_Farbwert-min_Farbwert) > 0) and (HSV_S > 0)) then begin if (max_Farbwert = RGB_R) then HSV_H := 60*((RGB_G-RGB_B)/Differenz); if (max_Farbwert = RGB_G) then HSV_H := 60*(2+(RGB_B-RGB_R)/Differenz); if (max_Farbwert = RGB_B) then HSV_H := 60*(4+(RGB_R-RGB_G)/Differenz); if (HSV_H < 0) then HSV_H := HSV_H + 360.0; end; scrollbar7.Position := round(HSV_H); scrollbar8.Position := round(HSV_S); scrollbar9.Position := round(HSV_V); Farbfeld.Brush.Color:=StrToInt('$'+((inttohex(scrollbar3.Position,2)+ //Blau-Anteil inttohex(scrollbar2.Position,2)+ //Grün-Anteil inttohex(scrollbar1.Position,2)))); // Rot-Anteil end; //--------------------------------------- //-----------------HLS------------------- //--------------------------------------- procedure TForm1.HLS(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); var RGB_R, RGB_G, RGB_B : Real; HLS_H, HLS_L, HLS_S : Real; HSV_H, HSV_S, HSV_V : Real; max_Farbwert : real; min_Farbwert : real; Differenz : real; Summe : real; RGB_R_temp1, RGB_G_temp1, RGB_B_temp1 : Real; RGB_R_temp2, RGB_G_temp2, RGB_B_temp2 : Real; HLS_H_temp, HLS_L_temp, HLS_S_temp : Real; HSV_H_temp, HSV_S_temp, HSV_V_temp : Real; RGB_R_temp, RGB_G_temp, RGB_B_temp : Real; ganz: integer; rest: real; d, w, x, y, z:real; L1, L2: real; begin HLS_H := Scrollbar4.Position; HLS_L := Scrollbar5.Position; HLS_S := Scrollbar6.Position; //Berechnung HLS-->RGB HLS_H_temp:=HLS_H/360; HLS_L_temp:=HLS_L/100; HLS_S_temp:=HLS_S/100; if HLS_S_temp=0 then begin RGB_R:=HLS_L; RGB_G:=HLS_L; RGB_B:=HLS_L; end; if HLS_L_temp < 0.5 then L2 := HLS_L_temp * (1 + HLS_S_temp); if HLS_L_temp >= 0.5 then L2 := HLS_L_temp + HLS_S_temp - (HLS_L_temp * HLS_S_temp); L1:=2*HLS_L_temp - L2; RGB_R_temp := HLS_H_temp + (1/3); if RGB_R_temp < 0 then RGB_R_temp:=RGB_R_temp+1; if RGB_R_temp > 1 then RGB_R_temp:=RGB_R_temp-1; if (6*RGB_R_temp)<1 then RGB_R_temp:=L1+(L2-L1)*6*RGB_R_temp else if (2*RGB_R_temp) < 1 then RGB_R_temp:=L2 else if (3*RGB_R_temp) < 2 then RGB_R_temp:=L1+(L2-L1)*((2/3)-RGB_R_temp)*6 else RGB_R_temp:=L1; RGB_G_temp:=HLS_H_temp; if RGB_G_temp<0 then RGB_G_temp:=RGB_G_temp+1; if RGB_G_temp>1 then RGB_G_temp:=RGB_G_temp-1; if (6*RGB_G_temp)<1 then RGB_G_temp:=L1+(L2-L1)*6*RGB_G_temp else if (2*RGB_G_temp)<1 then RGB_G_temp:=L2 else if (3*RGB_G_temp)<2 then RGB_G_temp:=L1+(L2-L1)*((2/3)-RGB_G_temp)*6 else RGB_G_temp:=L1; RGB_B_temp:=HLS_H_temp-(1/3); if RGB_B_temp<0 then RGB_B_temp:=RGB_B_temp+1; if RGB_B_temp>1 then RGB_B_temp:=RGB_B_temp-1; if (6*RGB_B_temp)<1 then RGB_B_temp:=L1+(L2-L1)*6*RGB_B_temp else if (2*RGB_B_temp)<1 then RGB_B_temp:=L2 else if (3*RGB_B_temp)<2 then RGB_B_temp:=L1+(L2-L1)*((2/3)-RGB_B_temp)*6 else RGB_B_temp:=L1; RGB_R:=RGB_G_temp*255; RGB_G:=RGB_B_temp*255; RGB_B:=RGB_R_temp*255; scrollbar1.Position := round(RGB_R); scrollbar2.Position := round(RGB_G); scrollbar3.Position := round(RGB_B); Farbfeld.Brush.Color:=StrToInt('$'+((inttohex(scrollbar3.Position,2)+ //Blau-Anteil inttohex(scrollbar2.Position,2)+ //Grün-Anteil inttohex(scrollbar1.Position,2)))); // Rot-Anteil //************************************************ //************************************************ RGB_R := Scrollbar1.Position; RGB_G := Scrollbar2.Position; RGB_B := Scrollbar3.Position; max_Farbwert := max(RGB_R, max(RGB_G,RGB_B)); min_Farbwert := min(RGB_R, min(RGB_G,RGB_B)); Differenz := max_Farbwert - min_Farbwert; Summe := max_Farbwert + min_Farbwert; //Berechnung RGB-->HSV HSV_V := max_Farbwert/2.55; if (max_Farbwert = 0) then HSV_S := 0; if (max_Farbwert > 0) then HSV_S := (max_Farbwert - min_Farbwert) / 2.55; if (HSV_S = 0) then HSV_H:=0; if (((max_Farbwert-min_Farbwert) > 0) and (HSV_S > 0)) then begin if (max_Farbwert = RGB_R) then HSV_H := 60*((RGB_G-RGB_B)/Differenz); if (max_Farbwert = RGB_G) then HSV_H := 60*(2+(RGB_B-RGB_R)/Differenz); if (max_Farbwert = RGB_B) then HSV_H := 60*(4+(RGB_R-RGB_G)/Differenz); if (HSV_H < 0) then HSV_H := HSV_H + 360.0; end; scrollbar7.Position := round(HSV_H); scrollbar8.Position := round(HSV_S); scrollbar9.Position := round(HSV_V); Farbfeld.Brush.Color:=StrToInt('$'+((inttohex(scrollbar3.Position,2)+ //Blau-Anteil inttohex(scrollbar2.Position,2)+ //Grün-Anteil inttohex(scrollbar1.Position,2)))); // Rot-Anteil end; //--------------------------------------- //-----------------HSV------------------- //--------------------------------------- procedure TForm1.HSV(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); var RGB_R, RGB_G, RGB_B : Real; HLS_H, HLS_L, HLS_S : Real; HSV_H, HSV_S, HSV_V : Real; max_Farbwert : real; min_Farbwert : real; Differenz : real; Summe : real; RGB_R_temp1, RGB_G_temp1, RGB_B_temp1 : Real; RGB_R_temp2, RGB_G_temp2, RGB_B_temp2 : Real; HLS_H_temp, HLS_L_temp, HLS_S_temp : Real; HSV_H_temp, HSV_S_temp, HSV_V_temp : Real; a,b,c:real; ganz: integer; rest: real; begin HSV_H := Scrollbar7.Position; HSV_S := Scrollbar8.Position; HSV_V := Scrollbar9.Position; //Berechnung HSV-->RGB if (HSV_S = 0) then begin RGB_R := HSV_V*2.55; RGB_G := HSV_V*2.55; RGB_B := HSV_V*2.55; end; if (HSV_S <> 0) then begin if (HSV_H = 360) then HSV_H:=0; HSV_H:=HSV_H/60; Ganz:=Trunc(HSV_H); // ganzzahliger Teil von HSV_H Rest:=Frac(HSV_H); // Nachkommastellen von HSV_H HSV_S:=HSV_S/100; HSV_V:=HSV_V/100; a:=HSV_V*(1-HSV_S); b:=HSV_V*(1-(HSV_S*Rest)); c:=HSV_V*(1-(HSV_S*(1-Rest))); a:=a*2.55; b:=b*2.55; c:=c*2.55; HSV_V:=HSV_V*2.55; case Ganz of 0: begin RGB_R:=HSV_V*100; RGB_G:=c*100; RGB_B:=a*100; end; 1: begin RGB_R:=b*100; RGB_G:=HSV_V*100; RGB_B:=a*100; end; 2: begin RGB_R:=a*100; RGB_G:=HSV_V*100; RGB_B:=c*100; end; 3: begin RGB_R:=a*100; RGB_G:=b*100; RGB_B:=HSV_V*100; end; 4: begin RGB_R:=c*100; RGB_G:=a*100; RGB_B:=HSV_V*100; end; 5: begin RGB_R:=HSV_V*100; RGB_G:=a*100; RGB_B:=b*100;end; end; end; scrollbar1.Position := round(RGB_R); scrollbar2.Position := round(RGB_G); scrollbar3.Position := round(RGB_B); //************************************************ //************************************************ RGB_R_temp2:=0; RGB_G_temp2:=0; RGB_B_temp2:=0; RGB_R := Scrollbar1.Position; RGB_G := Scrollbar2.Position; RGB_B := Scrollbar3.Position; max_Farbwert := max(RGB_R, max(RGB_G,RGB_B)); min_Farbwert := min(RGB_R, min(RGB_G,RGB_B)); Differenz := max_Farbwert - min_Farbwert; Summe := max_Farbwert + min_Farbwert; //Berechnung RGB-->HLS RGB_R_temp1:=RGB_R/255; RGB_G_temp1:=RGB_G/255; RGB_B_temp1:=RGB_B/255; HLS_L:=((max_Farbwert+min_Farbwert)/2); if min_Farbwert=max_Farbwert then begin HLS_H:=0; HLS_S:=0; end; if (((RGB_R = 0) and (RGB_G = 0) and (RGB_B = 0)) or ((RGB_R = 255) and (RGB_G = 255) and (RGB_B = 255))) then begin if ((RGB_R = 0) and (RGB_G = 0) and (RGB_B = 0)) then begin HLS_L := 0; HLS_S := 0; HLS_H := 0; end; if ((RGB_R = 255) and (RGB_G = 255) and (RGB_B = 255)) then begin HLS_L := 255; HLS_S := 0; HLS_H := 0; end; end else begin if ((min_Farbwert <> max_Farbwert)) then begin if (HLS_L < 50) then HLS_S:=abs((max_Farbwert-min_Farbwert)/(max_Farbwert + min_Farbwert)); if (HLS_L >= 50) then HLS_S:=abs((max_Farbwert-min_Farbwert)/(2-max_Farbwert-min_Farbwert)); RGB_R_temp2 := (RGB_R-min_Farbwert)/(max_Farbwert-min_Farbwert); RGB_G_temp2 := (RGB_G-min_Farbwert)/(max_Farbwert-min_Farbwert); RGB_B_temp2 := (RGB_B-min_Farbwert)/(max_Farbwert-min_Farbwert); if (RGB_R=max_Farbwert) then HLS_H:= (RGB_G_temp2-RGB_B_temp2); if (RGB_G=max_Farbwert) then HLS_H:=2+(RGB_B_temp2-RGB_R_temp2); if (RGB_B=max_Farbwert) then HLS_H:=4+(RGB_R_temp2-RGB_G_temp2); end; if not((RGB_R=RGB_G) and (RGB_R=RGB_B)) then HLS_H:=(HLS_H+2)*60; if (HLS_H<0) then HLS_H:=(HLS_H+360); if (HLS_H>360) then HLS_H:=(HLS_H-360); end; HLS_L:=HLS_L*100/255; HLS_S:=HLS_S*100; scrollbar4.Position := round(HLS_H); scrollbar5.Position := round(HLS_L); scrollbar6.Position := round(HLS_S); Farbfeld.Brush.Color:=StrToInt('$'+((inttohex(scrollbar3.Position,2)+ //Blau-Anteil inttohex(scrollbar2.Position,2)+ //Grün-Anteil inttohex(scrollbar1.Position,2)))); // Rot-Anteil end; //--------------------------------------- //----------Labels beschriften----------- //--------------------------------------- procedure TForm1.ScrollBarChange(Sender: TObject); begin label1.caption:=inttostr(scrollbar1.Position ); //Position ausgeben (Zahl) label2.caption:=inttostr(scrollbar2.Position ); //Position ausgeben (Zahl) label3.caption:=inttostr(scrollbar3.Position ); //Position ausgeben (Zahl) label4.caption:=inttostr(scrollbar4.Position ); //Position ausgeben (Zahl) label5.caption:=inttostr(scrollbar5.Position ); //Position ausgeben (Zahl) label6.caption:=inttostr(scrollbar6.Position ); //Position ausgeben (Zahl) label7.caption:=inttostr(scrollbar7.Position ); //Position ausgeben (Zahl) label8.caption:=inttostr(scrollbar8.Position ); //Position ausgeben (Zahl) label9.caption:=inttostr(scrollbar9.Position ); //Position ausgeben (Zahl) end; END. |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |