8
votes

Meilleure façon de représenter une couleur dans une base de données SQL?

Si j'utilise .NET et SQL Server 2008, quelle est la meilleure façon pour moi de stocker une couleur dans la base de données, devrais-je utiliser la touche ou le convertir en entier, ou autre chose?

EDIT:

Tout ce que je veux de la couleur, c'est être capable de le récupérer et de dessiner quelque chose sur l'écran de la couleur spécifiée. Je n'ai pas besoin de pouvoir interroger contre elle.


0 commentaires

6 Réponses :


16
votes

Comment les couleurs sont-elles stockées de manière nativement?

Si vous utilisez un format 0xRRGGBBB, vous pouvez également le stocker comme un entier dans la base de données et le redexifiez lorsque vous avez Sélectionnez (pour la lisibilité).


0 commentaires

11
votes

Comment stocker des informations dans une base de données dépend de la manière dont vous avez l'intention d'utiliser et d'y accéder. Il n'y a pas de dire ce que la meilleure façon de stocker est sans savoir comment vous l'utiliserez.


1 commentaires

+1 bien sûr, comme avec toutes les données . Une requête qui cherche tous les pixels avec vert entre 0x40 et 0x50 bénéficierait de stockage dans des composants séparés R, G et B (indexés chacun). Celui qui demande les "pixels transparents" dans 1 bil. Les enregistrements auraient besoin de la chaîne une chaîne séparée. Ou certaines requêtes demanderaient «la luminosité» et nécessiteraient un format HSV / HSL.



6
votes

La couleur peut être étonnamment délicate sur certaines industries telles que les caméras numériques, la publication de bureau, les sanners et autres. La plupart des programmeurs associent la couleur avec la couleur 24 bits (RVB généralement), certains associent-le avec le 32 bit (RGBA). Les rares qui travaillent dans des industries telles que DTP qui font une forte utilisation de la couleur ont un ensemble de termes plus riche qui inclut la correction des couleurs, Espace de couleur et ainsi de suite. Alors, qu'est-ce que vous avez exactement besoin de stocker?

  • Avez-vous besoin de stocker un seul format qui ne va pas changer?
  • Avez-vous besoin de stocker plusieurs formats et de savoir quel format est réellement stocké ( RVB vs . RGBA vs cmy contre HSV ETV)? Notez que même quelque chose d'apparemment aussi simple que RVB peut être Adobe RGB ou SRGB .
  • Avez-vous besoin de stocker l'espace de couleur et la correction? Remarque Souvent, la couleur RVB n'a pas de sens qu'elles sont correctes Gestion des couleurs .
  • Avez-vous besoin de stocker une simple description de texte («rouge», «chaux», «sarcelle», etc.)?
  • Avez-vous besoin de stocker la couleur "Web" (c.-à-d. RVB ou RGBA comme hexagone)?

0 commentaires

2
votes

Eh bien, je les stockerais comme des codes hexagonaux à six chiffres. Cela ouvre la possibilité intéressante de rechercher réellement des couleurs entre d'autres couleurs. Si vous voulez vraiment le rendre puissant, conservez les numéros Hex R, G, B dans trois colonnes. Cela vous permet de trouver des couleurs contenant tant de rouge ou de ceux qui sont similaires à une autre couleur (trier par différence moyenne des trois valeurs).


1 commentaires

Était sur le point de suggérer que moi-même. Les couleurs hexagonales sont la voie à suivre, imo.



3
votes

Si vous stockez le System.Drawing.color code>, vous devez stocker 4 octets représentant les canaux Alpha et 3 couleurs. Vous pouvez utiliser un type de données int code>.

Si vous stockez le System.Windows.Media.color code> (de WPF), il existe deux possibilités en fonction de l'utilisation Vous utilisez: p>

  1. Si vous utilisez uniquement des couleurs ArgB, stockez comme type de données code> int code>. LI>
  2. Si vous utilisez le Format SCRGB , vous devez stocker 4 float (single) valeurs. Je suggère deux méthodes de stocker: li>
    1. un type défini par l'utilisateur avec 4 champs de flotteurs. LI>
    2. un varchar (longueur dépend de la précision) et stocke
      color.ToString(CultureInfo.InvariantCulture)


0 commentaires

1
votes

dépend autant sur le type de couleur que vous souhaitez stocker. Par exemple. Si cela vient d'une palette fixe, un bref int ou même un octet non signé pourrait être suffisant.

3 octets rgb ou 4 octets argb (A = alpha, c'est-à-dire la transparence) pourraient s'intégrer en 32 bits, de sorte qu'un type entier non signé de 32 bits ne fonctionnerait pas. Ceci est la norme pour la plupart des applications. Cependant, vous pouvez en vouloir plus - auquel cas un entier de 64 bits non signé pourrait être nécessaire.

Alternativement, si vous souhaitez modifier ou interroger la couleur en fonction de ses composants, je stockais chaque composant comme son propre Int Int (c.-à-d .. Rouge, vert, bleu, champs alpha).


0 commentaires