0

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

null
    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Wolfgang, interessante Frage. Meines Wissens geht das geht nicht. Aber vielleicht kennt jemand anderes doch eine Möglichkeit.

    • info.28
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • info.28
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja Wahnsinn! Genial! Muss ich mir gleich anschauen!
    DANKE

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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. ;)

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • info.28
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Na das Thema hat Fahrt aufgenommen :)
    Danke nochmal!

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, jetzt fehlt nur noch der Code für die Umrechnung von HEX-Werten mit mehr als zwei Stellen... ;)

    • info.28
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Funktioniert perfekt! 💪👍

    • info.28
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Funktioniert perfekt! 💪👍

    • info.28
    • vor 4 Jahren
    • Gemeldet - anzeigen

    @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!

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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.

    • info.28
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Verstanden. DANKE

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Okay, mit Leos Optimierung bekommt der Code nun auch in der B-Note eine 10. Schöne Gemeinschaftsproduktion. 👍

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    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

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    🎯 🏆 🙏   (Bin sprachlos)

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 21Antworten
  • 2035Ansichten