RGB Werte aus Datenfeld Farbe auslesen
Hallo!
Wie kann ich die RGB Werte einer im Datenfeld Farbe ausgewählten Farbe die RGB Werte auslesen?
Danke für die Hilfe schon im Voraus!
LG,
Wolfgang
21 Antworten
-
Hallo Wolfgang, interessante Frage. Meines Wissens geht das geht nicht. Aber vielleicht kennt jemand anderes doch eine Möglichkeit.
-
Hab ich fast befürchtet! Hab ja auch in deiner unglaublich wertvollen Ninox-Refernz Datenbank nichts dafür heraus lesen können. Danke an dieser Stelle für diese Hilfestellung. Sie hat mir schon unzählige Male weitergeholen und ist meine erste Anlaufstelle, wenn ich wonach suche :)
LG und vielleicht weiß ja wirklich sonst wer was... ;)
Wolfgang -
Hallo Wolfgang,
text(Farbfeld) gibt zumindest den Hexwert der im Farbfeld gewählten Farbe aus ("#000000"-"#FFFFFF"), den String könnte man zerlegen und die RGB-Werte so ausrechnen...
lg, Torsten
-
Aah, hatte verschiedene Möglichkeiten durchgespielt, aber auf die Idee mit text() war ich nicht gekommen. Super!
Wobei die Umrechnung vermutlich nicht ganz ohne ist, aber immerhin.
-
Hallo,
hat mir keine Ruhe gelassen - hier ein funktionaler Code, der die RGB-Werte berechnet und ausgibt. Geht bestimmt viiiieeeel schöner/kürzer/professioneller :-)
function myMulti(myText : text) do
switch myText do
case "0":
0
case "1":
1
case "2":
2
case "3":
3
case "4":
4
case "5":
5
case "6":
6
case "7":
7
case "8":
8
case "9":
9
case "A":
10
case "B":
11
case "C":
12
case "D":
13
case "E":
14
case "F":
15
end
end;
let myHEX := text(Farbe);
let myRHEX := substr(myHEX, 1, 2);
let myGHEX := substr(myHEX, 3, 2);
let myBHEX := substr(myHEX, 5);
let myR := 16 * myMulti(substr(myRHEX, 0, 1)) + 1 * myMulti(substr(myRHEX, 1));
let myG := 16 * myMulti(substr(myGHEX, 0, 1)) + 1 * myMulti(substr(myGHEX, 1));
let myB := 16 * myMulti(substr(myBHEX, 0, 1)) + 1 * myMulti(substr(myBHEX, 1));
concat(myR, myG, myB)
lg, Torsten
-
Ja Wahnsinn! Genial! Muss ich mir gleich anschauen!
DANKE -
Auch von mir "Danke", Torsten! B-Noten für die Schönheit der Ausführung gibt's hier nicht, und als A-Note vergebe ich eine glatte 10. ;)
-
Hallo Jungs,
danke für' Feedback. Die Funktion myMulti() könnte man ja in die globale Funktionsliste schieben, falls man die Umrechnung an mehreren Stellen benötigt.
Was die B-Note anbelangt: Ich neige tendenziell sowieso dazu, Code nachvollziehbar (vor allem für mich als Quereinsteiger und SelfEducator) zu gestalten - selbst wenn ich kürzere Formen kenne. Das erleichtert (mir persönlich) das Debugging enorm. Einem gelernten Programmierer würden sich wohl hier und da die Zehennägel kräuseln, ist mir aber egal, Hauptsache, das Ergebnis stimmt.
lg, Torsten
-
Ja, da bin ich ganz bei dir. Nachvollziehbarkeit ist mir auch wichtig, für mich selbst, aber besonders natürlich hier im Forum. Optimieren kann man bei Bedarf später immer noch.
-
Sehr gut, und auch nützlich. Vielen Dank!!!
damit es ein bisschen kompakter wird:
---
function myMulti(myText : text) do
index("0123456789ABSDEF", myText)
end;
let myHEX := text(Farbe);
let myRHEX := substr(myHEX, 1, 2);
let myGHEX := substr(myHEX, 3, 2);
let myBHEX := substr(myHEX, 5);
let myR := 16 * myMulti(substr(myRHEX, 0, 1)) + 1 * myMulti(substr(myRHEX, 1));
let myG := 16 * myMulti(substr(myGHEX, 0, 1)) + 1 * myMulti(substr(myGHEX, 1));
let myB := 16 * myMulti(substr(myBHEX, 0, 1)) + 1 * myMulti(substr(myBHEX, 1));
concat(myR, myG, myB)
---
Leo
-
Hallo Leo,
das index() war mir nicht geläufig, vielen Dank! Ich hab mir erlaubt, den Typo in "0123456789ABSDEF" anzupassen:
---
function myMulti(myText : text) do
index("0123456789ABCDEF", myText)
end;
let myHEX := text(Farbe);
let myRHEX := substr(myHEX, 1, 2);
let myGHEX := substr(myHEX, 3, 2);
let myBHEX := substr(myHEX, 5);
let myR := 16 * myMulti(substr(myRHEX, 0, 1)) + 1 * myMulti(substr(myRHEX, 1));
let myG := 16 * myMulti(substr(myGHEX, 0, 1)) + 1 * myMulti(substr(myGHEX, 1));
let myB := 16 * myMulti(substr(myBHEX, 0, 1)) + 1 * myMulti(substr(myBHEX, 1));
concat(myR, myG, myB)
---
lg, Torsten
-
Na das Thema hat Fahrt aufgenommen :)
Danke nochmal! -
Ja, jetzt fehlt nur noch der Code für die Umrechnung von HEX-Werten mit mehr als zwei Stellen... ;)
-
Funktioniert perfekt!
-
Funktioniert perfekt!
-
@Torsten, vielleicht eine blöde Frage, aber ich kenn mich mit Farben in Wirklichkeit gar nicht aus... Ich programmiere eine Datenbank für eine befreundete Werbegrafikerin... :)
Was meinst du mit: HEX-Werten mit mehr als zwei Stellen ?
Besteht der HEX Code nicht immer aus insgesamt 6 Zeichen? (plus #)
Danke! -
der Farbwert in HEX besteht besteht in der Tat aus 6 Zeichen (zzgl. #), aber intern sind das ja drei Gruppen je 2 Stellen. Für Deine Anwendung und die spätere Verwendung im Web ist die hier erarbeitete Funktion exakt richtig.
HEX-Code allgemein kann aber natürlich aus mehr als zwei Stellen bestehen, "unser" Code müsste hierfür erweitert/umgebaut werden.
-
Verstanden. DANKE
-
Okay, mit Leos Optimierung bekommt der Code nun auch in der B-Note eine 10. Schöne Gemeinschaftsproduktion.
-
So, jetzt ist es noch kürzer, dafür aber unübersichtlich.
---
concat(for i from 1 to 6 step 2 do
let myVar := substr(text(Farbe), i, 2);
16 * index("0123456789ABCDEF", first(split(myVar, ""))) + index("0123456789ABCDEF", last(split(myVar, "")))
end)
---
Leo
-
(Bin sprachlos)
Content aside
- vor 4 JahrenZuletzt aktiv
- 21Antworten
- 2061Ansichten