Farbkonvertierung zu LLCP

Hallo,

ich erstelle aktuell einen Classic Report im Designer welcher anschließend in einen LLCP Report konvertiert wird. Dabei scheint es ein Problem mit den Farben zu geben.

Sowohl die LL-spezifischen BGR-Farbcodes (?), als auch verwendete Hexcodes werden nach der Konvertierung nicht mehr korrekt angezeigt:

Farben im Classic Report:

Farben im LLCP Report:

Wie kann ich sicherstellen, dass Farben in beiden Reports gleich dargestellt werden?

Das scheint nur über die Verwendung von LL-Farben wie “LL.Color.Yellow” zu funktionieren - ich erhalte die dargestellten Farben aber über meine Datenquelle - es kann sich um beliebige Farben handeln.

Viele Grüße
Simon

Hallo Simon,

ich versuche gerade, das einmal nachzustellen. Ich melde mich nochmal, sobald ich hier zu einem Ergebnis komme.

Mit freundlichen Grüßen
Leon

1 Like

Hallo Simon,

ich habe versucht das einmal nachzustellen, aber auch bei Benutzung bspw. von “167000” wird die Farbe richtig konvertiert und in LLCP angezeigt.

Wie kommen die Farbwerte denn aus der Datenquelle in den Bericht? Und besteht das Problem auch, wenn du bspw. “65535” innerhalb des Berichts per Einstellung (nicht über Datenquelle) setzt und diesen dann konvertierst?

Da ich aktuell nicht weiß, welche Version du nutzt, kannst du ggf. einmal das Latest Prerelease und damit vorsichtshalber einmal testen?

Bitte folgende Schritte dafür durchführen:

  1. Sicherung der aktuellen List & Label-Installation erstellen.
  2. “LatestPrerelease”-Servicepack installieren. Für .NET Nutzer: Aktualisierung der .NET Referenzen bzw. NuGet Packages in der betreffenden Anwendung - siehe Hinweise unten
  3. Nun prüfen, ob das Problem damit weiterhin reproduzierbar ist.
  4. Abschließend den combit-Support über das Testergebnis informieren.

Hinweis für .NET Nutzer Classic:
Die aktualisierten NuGet Packages von List & Label Classic befinden sich nur lokal in der Installation – nicht auf nuget.org.

Hinweis für .NET Nutzer CrossPlatform - verfügbar ab Version LL31:
Die aktualisierten NuGet Packages von List & Label CrossPlatform befinden sich lokal in der Installation oder stehen auf dem combit eigenen NuGet Server siehe Neuer NuGet-Server für tagesaktuelle LLCP-Pakete bereit.

Hallo Leon,

danke für die Rückmeldung. Wir haben nun LLCP auf die neuste Version aktualisiert, ich verwende nun Version 31.2.0-stable.329 - der Fehler tritt weiterhin auf.

Sowohl wenn die Farbwerte aus der Datenquelle kommen, als auch wenn ich die Farbcodes manuell eintrage, scheinen die Rot- und Blau-Werte im LLCP vertauscht zu sein:

Manuell eingetragener Farbwert (Blau) im Report Designer (Classic):

Anzeige der Vorschau im Designer - Farbe wird korrekt als Blau dargestellt (links).
Daneben die Farbe im LLCP-Report - Farbe wird fälschlicherweise als Rot dargestellt (rechts).

Auch bei Farbwerten die aus der Datenquelle kommen, habe ich das Problem. Das Gelb aus dem Designer wird im LLCP-Report als Türkis dargestellt. Auch hier sind also die Rot- und Blau-Werte vertauscht. Der Farbwert aus der Datenquelle lautet 65535:

Für mich sieht das ein bisschen so aus, als würde der Designer mit RGB-Werten arbeiten, bei der Konvertierung nach LLCP wird aus irgendeinem Grund aber davon ausgegangen, dass es sich um BGR-Werte handelt. Das würde die vertauschten Rot- und Blau-Werte erklären.

Viele Grüße
Simon

Hallo Simon,

wir konnten das jetzt auch reproduzieren. Bei mir trat das zunächst nicht auf, weil ich andere Farbwerte (bspw. für ein “Moosgrün”) genutzt hatte.

Ggf. betrifft das wie du schon nennst nur einen bestimmten Farbbereich. Ich habe hierfür ein internes Ticket für die Entwicklungsleitung angelegt und gebe nochmal ein Update, sobald ich eins habe.

Mit freundlichen Grüßen
Leon

1 Like

Hallo Simon,

folgende Rückmeldung habe ich hierzu für dich: Das beobachtete Verhalten passiert dann, wenn die Werte absolut als BBGGRR übergeben werden (das ist das interne Format von LL Classic). LLCP verwendet dagegen AARRGGBB, das ist das eigentlich übliche Standardformat heutzutage.

Besteht die Möglichkeit, die Werte deshalb entsprechend angepasst/anders zu übergeben? Das können wir leider kaum anders lösen laut unserer Entwicklungsabteilung. Bei Verwendung von Schemata (LL.Scheme.Color), Farbkonstanten (LL.Color…) oder Formeln (RGB/HSL/ChangeLightness etc.) wird das ja im Hintergrund automatisch richtig gemacht, wie auch von dir beobachtet.

Mit freundlichen Grüßen
Leon

Hallo Leon,

danke für die Antwort. Grundsätzlich haben wir schon die Möglichkeit unsere Datenquelle anzupassen, so dass die Farben in einem anderen Format in den Report übergeben werden. Dann muss ich lediglich wissen, in welchem Format wir die Farben übergeben müssen, damit diese sowohl im Report Designer (Classic) als auch im LLCP-Report korrekt angezeigt werden. Das ist zwingend notwendig, da ich im Designer die Reports baue und diese dann in LLCP konvertiert werden.

Kannst du mir ggf. eine Beispielformatierung und entsprechende Formatierungsregeln für das genutzte Beispiel “16711680“ (reines Blau) mitteilen? Es ist zwingend notwendig, dass die Farben aus der Datenquelle kommen.

viele Grüße
Simon

Hallo Simon,

wenn die Werte aus der Datenquelle kommen könntest du z. B. im AutoDefineField-Event im LLCP-Code die Farbwerte drehen. Ungefähr so wie hier:

public static int ConvertClassicColorToLLCP(int bbggrr)
{
int bb = (bbggrr >> 16) & 0xFF;
int gg = (bbggrr >> 8) & 0xFF;
int rr = bbggrr & 0xFF;

int aa = 0xFF;

return (aa << 24) | (rr << 16) | (gg << 8) | bb;
}

Damit konvertierst du von Classic zu LLCP. Wenn die Werte als hart codierte Zahlen im Bericht sind, kannst du die neue Variable LL.IsCrossPlatform verwenden und z. B. ein if für eine bedingte Farbe machen.

Konkret 16711680 (0xff0000) ist BGR, das wäre in RGB entsprechend 0x0000ff also einfach 255. Genau diese Berechnung macht die Funktion oben auch.

Mit freundlichen Grüßen
Leon

Hall Leon,

danke für die ausführliche Erklärung. Da ich leider keinen direkten Zugriff auf den LLCP-Code habe, musste ich mir nun eine Lösung im Classic-Report (Designer) bauen, welche sicherstellt, dass der Farbcode bei der Konvertierung zu LLCP richtig umgerechnet wird. Das hat mit deinen Infos aber ganz gut geklappt. Hier eine kurze Erklärung, falls jemand über ein ähnliches Problem stolpert:

  1. Ich habe Farbwerte im Format einer Zahl, bspw. “16711680“ aus der Datenquelle (so sollte das laut LL-Doku auch eigentlich funktionieren).
  2. Wenn ich diese direkt als Farbwert im Classic-Report übernehme, werden sie im LLCP-Report falsch interpretiert.
  3. Ich habe mich deshalb dazu entschieden den Farbwert aus der Datenquelle wieder in RGB-Einzelanteile aufzusplitten und mit der Formel RGB(R,G,B) als Farbwert im Report zu benutzen.
  4. Die Aufsplittung meiner Farbe aus der Datenquelle (hier “c”) in RGB-Einzelanteile funktioniert nach folgendem Schema:
    B = c \ 65536
    G = (c Mod 65536) \ 256
    R = c Mod 256
  5. Da es im Designer scheinbar keine Funktion für Modulo gibt, musste ich auf die Frac()-Funktion zurückgreifen. Ein Farbwert berechnet sich dann wie folgt:
    RGB(Frac(ValueFromDataSource/256)*256,(Frac(ValueFromDataSource/65536)*65536)/256,ValueFromDataSource/65536)

Gegebenenfalls werden wir die Farbwerte in der Datenquelle auch nochmal auf RGB-Einzelanteile umbauen, dann ist diese Berechnung nicht notwendig. So wäre das ganze aber abbildbar.

Grüße
Simon

1 Like

Es gibt den Operator %.

1 Like

Super, danke für den Hinweis. Das macht die Berechnung natürlich etwas einfacher.