Der beste Weg, um eine Farbe in einer SQL-Datenbank darzustellen?

8

Wenn ich .Net und SQL Server 2008 verwende, was ist der beste Weg für mich, eine Farbe in der Datenbank zu speichern, sollte ich ToString verwenden oder es in eine Ganzzahl oder etwas anderes konvertieren?

Bearbeiten:

Alles, was ich von der Farbe haben möchte, ist, dass ich sie abrufen und etwas auf dem Bildschirm in der angegebenen Farbe zeichnen kann. Ich muss nicht in der Lage sein, dagegen zu fragen.

    
Colin Desmond 10.09.2009, 16:52
quelle

6 Antworten

16

Wie werden die Farben nativ gespeichert?

Wenn Sie nur das 0xRRGGBB-Format verwenden, können Sie es auch als Integer in der Datenbank speichern und es bei SELECT (zur besseren Lesbarkeit) erneut hexen.

    
Mark Rushakoff 10.09.2009, 16:55
quelle
11

Wie Informationen in einer Datenbank gespeichert werden, hängt davon ab, wie Sie beabsichtigen, sie zu verwenden und darauf zuzugreifen. Es ist nicht zu sagen, was der beste Weg, um es zu speichern ist, ohne zu wissen, wie Sie es verwenden.

    
Steve Kass 10.09.2009 17:04
quelle
6

Farbe kann in einigen Branchen wie Digitalkameras, Desktop Publishing, Sanners und anderen erstaunlich schwierig sein. Die meisten Programmierer assoziieren Farbe mit der 24-Bit-Farbe (normalerweise RGB), einige assoziieren sie mit dem 32-Bit (RGBA). Die wenigen, die in Branchen wie DTP arbeiten, die Farbe intensiv nutzen, haben eine größere Menge von Begriffen, die Farbkorrektur, Farbraum und so weiter und so fort. Was genau müssen Sie speichern?

  • Müssen Sie ein einzelnes Format speichern, das sich nicht ändert?
  • Müssen Sie mehrere Formate speichern und wissen, welches Format tatsächlich gespeichert ist ( RGB vs. RGBA vs. CMY vs . HSV etv)? Beachten Sie, dass sogar scheinbar so einfaches wie RGB Adobe RGB oder sRGB .
  • Müssen Sie Farbraum und Korrektur speichern? Beachten Sie, dass die RGB-Farbe oft keine Bedeutung hat, ohne das eigentliche Farbmanagement .
  • Müssen Sie eine einfache Textbeschreibung speichern ('rot', 'lime', 'teal' usw.)?
  • Müssen Sie die 'Web' Farbe speichern (zB RGB oder RGBA als Hex)?
Remus Rusanu 10.09.2009 17:26
quelle
3

Wenn Sie System.Drawing.Color speichern, müssen Sie 4 Bytes speichern, die die Alpha- und die 3 Farbkanäle darstellen. Sie können den Datentyp int verwenden.

Wenn Sie System.Windows.Media.Color (von WPF) speichern, gibt es zwei Möglichkeiten, die von der verwendeten Verwendung abhängen:

  1. Wenn Sie nur ARGB-Farben verwenden, speichern Sie sie als int -Datentyp.
  2. Wenn Sie das ScRGB -Format verwenden, müssen Sie 4 Float (single) -Werte speichern. Ich schlage zwei Arten vor, es zu speichern:
    1. Ein benutzerdefinierter Typ mit 4 Float-Feldern.
    2. Ein varchar (Länge hängt von der Genauigkeit ab) und speichert
      color.ToString(CultureInfo.InvariantCulture)
Pierre-Alain Vigeant 10.09.2009 18:01
quelle
2

Nun, ich würde sie als sechsstellige Hex-Codes speichern. Das eröffnet die interessante Möglichkeit, nach Farben zwischen anderen Farben zu suchen. Wenn Sie es wirklich leistungsfähig machen wollen, behalten Sie die Hexadezimalzahlen R, G, B in drei Spalten. Auf diese Weise können Sie Farben finden, die so viel Rot enthalten, oder solche, die einer anderen Farbe ähneln (nach durchschnittlicher Differenz der drei Werte sortieren).

    
Sudhir Jonathan 10.09.2009 17:30
quelle
1

Es hängt so sehr von der Art der Farbe ab, die Sie speichern möchten. Z.B. Wenn es aus einer festen Palette stammt, kann ein kurzes int oder sogar ein vorzeichenloses Byte ausreichen.

3 Byte RGB oder 4 Byte ARGB (A = alpha, dh Transparenz) könnte in 32 Bit passen, also würde ein 32 Bit vorzeichenloser Integer-Typ funktionieren. Dies ist der Standard für die meisten Anwendungen. Möglicherweise möchten Sie jedoch mehr - in diesem Fall ist möglicherweise eine 64-Bit-Ganzzahl ohne Vorzeichen erforderlich.

Alternativ, wenn Sie die Farbe nach ihren Komponenten ändern oder abfragen möchten, würde ich jede Komponente als eigene unsigned int (dh rot, grün, blau, Alpha Felder) speichern.

    
winwaed 11.01.2011 16:00
quelle