Autor Beitrag
JungerIslaender
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Sa 07.03.09 15:30 
Folgendes möchte ich umsetzen, habe leider keine Ahnung wie.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
function TForm1.RGBToColor(Rot,Grün,Blau :integer):String;
begin
//Gesucht
end;
Dunkel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Sa 07.03.09 15:48 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Nein, er meint so etwas wie hellrot usw., wofür es nichts fertiges geben dürfte. Das geht also nur selbst zu schreiben.


Das geht nur selbst zu shreiben, Genau und da dachte ich das mir jemand helfen könnte. Denn die einzige idee die ich hab sieht so aus:
ausblenden Delphi-Quelltext
1:
if ((Rot=000and (Grün=000and (Blau=000)) then result:= 'Schwarz';					


und das für alle möglichkeiten zu machen dauert erstens ewig und ist zweitens glaube ich nicht sehr schnell.


Zuletzt bearbeitet von JungerIslaender am Sa 07.03.09 15:57, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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<
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: Sa 07.03.09 20:06 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 02:14, insgesamt 1-mal bearbeitet
Magic J
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
BeitragVerfasst: 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.

ausblenden volle Höhe Delphi-Quelltext
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=0then HSVSaettigung:=0 else HSVSaettigung:=round(delta*(255/HSVHelligkeit));
  if (HSVSaettigung=0then 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<0then HSVFarbwert:=HSVFarbwert+360;
    //HSV.h hat noch einen Wertebereich von 0..360  darum jetzt auf 0..255 normieren
    HSVFarbwert:=Round(HSVFarbwert*255/360);
  End;
  Case H0_S1_V2 of
     0:Result:=HSVFarbwert;
     1:Result:=HSVSaettigung;
    else Result:=HSVHelligkeit;
  End;
End;

//Aufruf:
function RGBTOColor(R,G,B: Byte): TColor; 
var farbe,Saet,Hell:Integer;
begin
  farb:=RGBtoHSV(R,G,B,0);  // Farbwert
  Saet:=RGBtoHSV(R,G,B,1);  // Saetigung
  Hell:=RGBtoHSV(R,G,B,2);  // Helligkeit

  if (saet<50Then 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:     // ...oder so...
      Begin  // Rot
        if hell>150 then Result:=clRed
                    else Result:=clMaroon;
      end;

      //usw.

    end;
  end;
end;


Bereiche musst du allerdings selber genau einstellen...

Schönen Gruß,
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Sa 07.03.09 22:39 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 66

WinXP Prof., Vista
Delphi6, Delphi 2009, Java(Eclipse), C++, Basic
BeitragVerfasst: So 08.03.09 11:01 
user profile iconGTA-Place hat folgendes geschrieben Zum zitierten Posting springen:

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?
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Mo 09.03.09 20:23 
SUPER, vielen Dank mache mich sobald ich kann an die Arbeit und poste meine Ergebnisse.
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 682

Mac OS X Snow Leopard
Xcode 3.1
BeitragVerfasst: Sa 14.03.09 01:09 
user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131

WIN 2000
TP, C, Delphi 1.0, Turbo Delphi 2006, Delphi 7
BeitragVerfasst: Fr 03.04.09 14:19 
user profile iconMagic J hat folgendes geschrieben Zum zitierten Posting springen:


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Fr 03.04.09 15:47 
user profile iconMartello hat folgendes geschrieben Zum zitierten Posting springen:
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