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.
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.
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.
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?
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:
int
-Datentyp. color.ToString(CultureInfo.InvariantCulture)
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).
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.
Tags und Links sql .net sql-server tsql data-modeling