ColorConvert

    • Offizieller Beitrag

    Funktionen in Nim, um Farbwerte zwischen RGB und BGR und zwischen RGB und HSV umzuwandeln konnte ich nicht finden, also habe ich das mal selbst geschrieben.

    Ich habe die Funktionen überladen, sodass man sowohl einen int32 Wert übergeben kann, als auch drei Einzelwerte für RGB bzw. HSV. Außerdem gibt es noch jeweils ein Objekt für die Beiden.

    Bei RGB:

    Die Werte für R, G und B liegen jeweils zwischen 0...255 (0x00...0xFF).

    Bei HSV:

    Der Wert für H liegt zwischen 0...359. Und die Werte für S und V zwischen 0.00...100.00

    Das Modul:

    Und das Beispiel:

    Alles auch zum downloaden im Anhang.

  • Hi Oscar,

    du könntest UNION in TYPE verwenden, um r, g, b, a mit z.b. col als Int32 zu vereinen. Damit sparst du dir die Umwandlung von den R, G, B, A Werten zu Int32.

    Sowas benutze ich mit Freebasic.

    Output:

    Code
    Farbe: FF102040

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    • Offizieller Beitrag

    du könntest UNION in TYPE verwenden

    Ist in Nim so nicht direkt vorgesehen. Es besteht die Möglichkeit über Pointer auf einen Wert mit unterschiedlichen Datentypen zuzugreifen. Aber das ist wohl nicht das, was UEZ meint.

    Bsp.

  • Union bedeutet einfach, dass ein Speicherbereich in der Strukt (Type) geteilt (shared) wird.

    In dem FB Beispiel ist die Strukt nur 4 Bytes groß, d.h. man kann direkt in r, g, b, a schreiben und anschließend col auslesen (32 Bit Wert), ohne vorher die Umwandlung durchführen zu müssen.

    Ich weiß nicht, ob NIM diese Datenstruktur überhaupt implementiert hat.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    • Offizieller Beitrag

    Ich weiß nicht, ob NIM diese Datenstruktur überhaupt implementiert hat.

    Nachdem ich jetzt ausgiebig gegoogelt habe, fand ich ein Beispiel für eine Union in Nim.

    Und daraus habe ich jetzt mal ein Beispiel erstellt:

    Das ist etwas komplizierter und vom Zugriff her nicht so optimal, aber es funktioniert.

    So nebenbei habe ich dann auch mal Union verstanden. Danke, UEZ! :):thumbup:

    Edit: Code noch etwas gekürzt. So geht's auch.

    Edit2: Den Vorschlag von UEZ eingebaut. Jetzt als ARGB.

  • Ich würde es so machen:

    Einfach um die 32-bit Bandbreite auszunutzen, also mit Alpha Kanal.

    Ich hatte auch lange gerätselt, was Union ist, bis ich mir das mal näher angeschaut habe und für diesen Zweck als sehr nützlich gefunden habe.

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯