¿La mejor manera de representar un color en una database SQL?

Si estoy usando .Net y SQL Server 2008, ¿cuál es la mejor manera para que almacene un color en la database, debería usar ToString o convertirlo a un número integer, o algo más?

Editar:

Todo lo que quiero del color es poder recuperarlo y dibujar algo en la pantalla en el color especificado. No necesito poder consultar en contra de esto.

¿Cómo se almacenan los colors de forma nativa?

Si solo está utilizando el formatting 0xRRGGBB, también puede almacenarlo como un número integer en la database, y volver a generarlo cuando SELECT (para facilitar la lectura).

La forma de almacenar información en una database depende de cómo se pretenda utilizarla y acceder a ella. No hay forma de decir cuál es la mejor manera de almacenarlo sin saber cómo lo usará.

El color puede ser sorprendentemente complicado en algunas industrias, como las cameras digitales, las autoediciones, los sanners y otros. La mayoría de los progtwigdores asocian el color con el color de 24 bits (RGB generalmente), algunos lo asocian con el de 32 bits (RGBA). Los pocos que trabajan en industrias como el DTP que hacen uso intensivo del color tienen un set de términos más completo que incluye corrección de color , espacio de color , etc., etc. Entonces, ¿qué es exactamente lo que necesitas para almacenar?

  • ¿Necesita almacenar un solo formatting que no va a cambiar?
  • ¿Necesita almacenar múltiples formattings y saber qué formatting está realmente almacenado ( RGB vs. RGBA vs. CMY vs. HSV etv)? Tenga en count que incluso algo aparentemente tan simple como RGB en realidad puede ser Adobe RGB o sRGB .
  • ¿Necesita almacenar espacio de color y corrección? Nótese a menudo que el color RGB no tiene ningún significado sin la gestión adecuada del color .
  • ¿Necesita almacenar una descripción de text simple ('rojo', 'lima', 'verde azulado', etc.)?
  • ¿Necesita almacenar el color 'web' (es decir, RGB o RGBA como hex)?

Si está almacenando System.Drawing.Color , necesita almacenar 4 bytes que representan los canales alfa y 3 de color. Puede usar un tipo de datos int .

Si está almacenando System.Windows.Media.Color (de WPF), existen dos posibilidades según el uso que esté utilizando:

  1. Si solo está utilizando colors ARGB, almacénelo como un tipo de datos int .
  2. Si está utilizando el formatting ScRGB , necesita almacenar 4 valores flotantes (únicos). Sugiero dos forms de almacenarlo:
  1. Un tipo definido por el usuario con 4 campos flotantes.
  2. Un varchar (la longitud depende de la precisión) y el almacenamiento
      color.ToString (CultureInfo.InvariantCulture) 

Bueno, los almacenaría como códigos hexadecimales de seis dígitos. Eso abre la interesante posibilidad de search realmente colors entre otros colors. Si realmente quiere hacerlo poderoso, mantenga los numbers hexadecimales R, G, B en tres columnas. Eso le permite encontrar colors que contienen tanto rojo, o los que son similares a otro color (orderar por diferencia promedio de los tres valores).

Depende mucho del tipo de color que desee almacenar. P.ej. si es de una paleta fija, entonces un byte corto o incluso un byte sin signo podría ser suficiente.

RGB de 3 bytes o ARGB de 4 bytes (A = alfa, es decir, transparencia) podría caber en 32 bits, por lo que funcionaría un tipo integer sin signo de 32 bits. Este es el estándar para la mayoría de las aplicaciones. Sin embargo, es posible que desee más, en cuyo caso podría ser necesario un integer sin signo de 64 bits.

Alternativamente, si desea modificar o consultar el color de acuerdo con sus componentes, almacenaría cada componente como su propio int sin firmar (es decir, campos rojos, verdes, azules, alfa).