Autor |
Beitrag |
JungerIslaender
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Sa 07.03.09 15:30
Folgendes möchte ich umsetzen, habe leider keine Ahnung wie.
Delphi-Quelltext 1: 2: 3: 4:
| function TForm1.RGBToColor(Rot,Grün,Blau :integer):String; begin end; |
|
|
Dunkel
      
Beiträge: 682
Mac OS X Snow Leopard
Xcode 3.1
|
Verfasst: Sa 07.03.09 15:34
GetRValue, GetGValue& GetBValue suchst Du, und wirst Du wahrscheinlich auch in der OH finden.
Edit: berichtigt.
_________________ Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.03.09 15:37
Nein, er meint so etwas wie hellrot usw., wofür es nichts fertiges geben dürfte. Das geht also nur selbst zu schreiben.
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Sa 07.03.09 15:48
Zuletzt bearbeitet von JungerIslaender am Sa 07.03.09 15:57, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.03.09 15:52
Gleich muss ja nicht sein, das wären ja 255^3 Möglichkeiten. Die Kriterien sind ja eher sowas wie rot zwischen 10 und 150 und grün und blau höchstens halb so groß für dunkelrot. Genauso für rot > 150 und hellrot.
Oder wenn alle Werte nur 20 oder so auseinander liegen und < 150 sind, dann dunkelgrau, >= 150 hellgrau.
Und so weiter, wenn du das geschickt machst, dann ist das nicht so viel Arbeit.
|
|
>M@steR<
      
Beiträge: 288
Erhaltene Danke: 3
|
Verfasst: Sa 07.03.09 20:06
Zuletzt bearbeitet von >M@steR< am Di 17.09.13 02:14, insgesamt 1-mal bearbeitet
|
|
Magic J
      
Beiträge: 66
WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
|
Verfasst: Sa 07.03.09 20:41
hi
durch Umwandeln des RGB in einen HSV-Farbraum macht die einteilung etwas leichter!
Vorallem, um zu erkennen ob es sich um grautöne handelt oder wie hell eine farbe ist.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66:
| function RGBtoHSV(rot,gruen,blau:Byte;H0_S1_V2:Integer):Integer; var HSVFarbwert,HSVSaettigung,HSVHelligkeit:Integer; minimum,maximum,delta:Integer;
function min(wert1,wert2,wert3:Byte):Byte; Begin if (wert1<wert2) and (wert1<wert3) Then Result:=wert1 else if (wert2<wert1) and (wert2<wert3) Then Result:=wert2 else Result:=wert3; End;
function max(wert1,wert2,wert3:Byte):Byte; Begin if (wert1>wert2) and (wert1>wert3) Then Result:=wert1 else if (wert2>wert1) and (wert2>wert3) Then Result:=wert2 else Result:=wert3; End;
Begin minimum:=min(blau,gruen,rot); maximum:=max(blau,gruen,rot); delta:=maximum-minimum; HSVHelligkeit:=maximum; HSVFarbwert:=0; if (HSVHelligkeit=0) then HSVSaettigung:=0 else HSVSaettigung:=round(delta*(255/HSVHelligkeit)); if (HSVSaettigung=0) then HSVFarbwert:=0 else Begin if (maximum=rot) then HSVFarbwert:=Round(60*(gruen-blau)/delta) else if (maximum=gruen) then HSVFarbwert:=120 + Round(60*(blau-rot)/delta) else if (maximum=blau) then HSVFarbwert:=240 + Round(60*(rot-gruen)/delta); if (HSVFarbwert<0) then HSVFarbwert:=HSVFarbwert+360; HSVFarbwert:=Round(HSVFarbwert*255/360); End; Case H0_S1_V2 of 0:Result:=HSVFarbwert; 1:Result:=HSVSaettigung; else Result:=HSVHelligkeit; End; End;
function RGBTOColor(R,G,B: Byte): TColor; var farbe,Saet,Hell:Integer; begin farb:=RGBtoHSV(R,G,B,0); Saet:=RGBtoHSV(R,G,B,1); Hell:=RGBtoHSV(R,G,B,2); if (saet<50) Then begin case hell of 0..50:result:=clBlack; 51..120:result:=clGray; 121..200:result:=clSilver; 200..255:Result:=clWhite; end; end else begin case farb of 0..20,250..255: Begin if hell>150 then Result:=clRed else Result:=clMaroon; end;
end; end; end; |
Bereiche musst du allerdings selber genau einstellen...
Schönen Gruß,
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Sa 07.03.09 22:39
Delphi-Quelltext 1: 2: 3: 4:
| function RGBToColor(Rot, Gruen, Blau: Integer): String; begin Result := ColorToString(RGB(Rot, Gruen, Blau)); end; |
Reicht dir das nicht? (0/0/0 = clBlack, 255/0/0 = clRed, ...)
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Magic J
      
Beiträge: 66
WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
|
Verfasst: So 08.03.09 11:01
GTA-Place hat folgendes geschrieben : |
Reicht dir das nicht? (0/0/0 = clBlack, 255/0/0 = clRed, ...) |
kommt ganz drauf an, ob einem ein Antwort mit bespielsweise
$0075A316
ausreicht, oder ob die Farbbereiche in "lesbare" Teile geteilt werden sollen...
zb. in die 16 Grundfarben des 4Bit-Frabraumes...
...oder halt eine beliebige definierte Menge an beschreibaren Farben...
@JungerIslaender:
Da du als Result Typ ein String zurück gibst is "clred" wohl nicht das, was du als Antwort erwartest?
jaenicke hat folgendes geschrieben : | Nein, er meint so etwas wie hellrot usw., wofür es nichts fertiges geben dürfte. Das geht also nur selbst zu schreiben. |
Das lässt sich aber mit meinem oben geposteten Code genauso leicht realisieren!
Gruß,
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Mo 09.03.09 20:23
SUPER, vielen Dank mache mich sobald ich kann an die Arbeit und poste meine Ergebnisse.
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Fr 13.03.09 23:28
Ich bin gerade dabei, und hab festgestellt, es kann doch nicht sein das ich gerade alle farben definiere. Das muss doch schonmal jemand anderes gemacht haben. Denn woher wüsste ich sonst was gelb wäre^^.:
www.farb-tabelle.de/de/farbtabelle.htm
Wie kann ich das am besten in meinem Programm umsetzen. Hab leider nichts mit bereichen und auch nicht mit HSV gefunden.
P.S. Bis auf kleine Fehler und fehlende Definitionen meinerseits, funktioniert es.
|
|
Dunkel
      
Beiträge: 682
Mac OS X Snow Leopard
Xcode 3.1
|
Verfasst: Sa 14.03.09 01:09
JungerIslaender hat folgendes geschrieben : | Wie kann ich das am besten in meinem Programm umsetzen. |
IMHO sind Farbe, und deren Definition, eh in erster Linie abhängig von der persönlichen Empfindung (ich seh' z.B. in Deiner geposteten Farbtabellen-Auflsitung keinen Unterschied zwischen Blue1/2/3, Cyan1/2/3, geschweige denn bei den Grau-Abstufungen [zumindest im direkten Vergleich der angrenzenden Grau-Farben]). Menschen mit Rot-Grün-Sehschwäche (*wink*) gar -blindheit empfinden Farben anders als welche, die den Farbraum komplett [in den physiologischen Grenzen] wahrnehmen können).
Im Grunde wird Dir nichts anderes übrig bleiben als 255^3 Farben einen Namen zu geben (und das ist nur der 16bit-Farbbereich, 24- und 32-bit [und mehr] haben nochmal feinere Unterscheidungen; ein analoger Röhrenmonitor [an dem man die Farbtemperatur via Hardware festlegen kann] stellt Farben anders dar als ein digitaler Flachbildschirm,...)
Aber die Tabelle ist doch schon ganz OK. Programmier Dir einen Automatismus, der die gegebenen RGB-Werte der Lautsprache gegenüberstellt. Schon sollte Dein Problem erledigt sein.
_________________ Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Sa 14.03.09 14:21
Ich hab noch nie einen automatismus geschrieben. Wie mach ich das am besten? Ich hab mir überlegt das ich das ganze ja einfach in eine txt datei packen kann:
AliceBlue 240,248,255 F0F8FF
BlueViolet 138,43,226 8A2BE2
CadetBlue 95,158,160 5F9EA0
ich hab noch mehr tabellen gefunden:
Black Schwarz #000000 0 0 0
Gray Grau #808080 128 128 128
Silver Silber #C0C0C0 192 192 192
255 250 250 FFFAFA snow snow
248 248 255 F8F8FF ghost white ghost white
248 248 255 F8F8FF GhostWhite GhostWhite
245 245 245 F5F5F5 white smoke white smoke
Ich kenn da leider nur die befehle loadfromfile und savetofile von nem memo. Das wars dann schon.
|
|
Martello
      
Beiträge: 131
WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
|
Verfasst: Fr 03.04.09 14:19
Magic J hat folgendes geschrieben : |
kommt ganz drauf an, ob einem ein Antwort mit bespielsweise
$0075A316
ausreicht, oder ob die Farbbereiche in "lesbare" Teile geteilt werden sollen...
|
Welche einfachen/eleganten Farbzuweisungen sind denn gängig/möglich?
Ich kenne bisher nur ...color:= clFarbName;
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Fr 03.04.09 15:47
Martello hat folgendes geschrieben : | Welche einfachen/eleganten Farbzuweisungen sind denn gängig/möglich?
Ich kenne bisher nur ...color:= clFarbName; |
Hallo,
das Problem ist doch einfach, dass es unendlich viele Farben gibt, oder unter Berücksichtigung der menschlichen Augen zumindest Millionen. Wieviele davon einen Namen haben weiss niemand und es hängt auch von der Sprache ab, z.B. sollen Eskimos einige zig Farben von Schnee unterscheiden, der für uns einfach weiss ist.
Zudem kann ja jeder eine neue Farbe erfinden (angeblich), so hat Armani neulich ein neues Grauviolett o.ä. als neue Modefarbe erklärt und patentieren lassen. Und die Telekom hat schon versucht ihre Magentafarbe eklusiv für sich reservieren zu lassen und sozusagen aus dem öffentlichen Farbraum zu entfernen, das ging aber den Gerichten bisher noch zu weit.
Die einzig praktible Möglichkeit ist meiner Meinung nach, eine Tabelle mit Namen und RGB oder HSI-Werten zu nehmen und mit einer Abstandsfunktion zu prüfen, welche der gegebenen Farbe am ähnlichsten ist. Damit spart man sich auch die problematische Einteilung in feste Abschnitte. Am besten übergibt man die Liste als offenes Array, dann kann man einfach die 16 Windows-Grundfarben nehmen oder die 255 www-Farben oder eine RAL-Tabelle usw. Wie gut das funktioniert, hängt von der Abstandsfunktion ab, die dem menschlichen Farbempfinden entsprechen sollte, der H-Wert von HSI ist sicher nicht schlecht für den Anfang.
Gruss Reinhard
|
|
|