Pergunta

Se estou usando o .NET e o SQL Server 2008, qual é a melhor maneira de armazenar uma cor no banco de dados, devo usar a toque ou convertê -lo em um número inteiro ou outra coisa?

Editar:

Tudo o que quero da cor é poder recuperá -lo e desenhar algo na tela na cor especificada. Não preciso consultar isso.

Foi útil?

Solução

Como as cores são armazenadas nativamente?

Se você está apenas usando o formato 0xrrggbb, você também pode armazená-lo como um número inteiro no banco de dados e o reexificá-lo quando você SELECT (para legibilidade).

Outras dicas

Como armazenar informações em um banco de dados depende de como você pretende usá -las e acessá -las. Não há como dizer qual é a melhor maneira de armazená -lo sem saber como você o usará.

A cor pode ser surpreendentemente complicada em algumas indústrias, como câmeras digitais, publicação de desktop, Sanners e outros. A maioria dos programadores associa a cor à cor de 24 bits (geralmente RGB), alguns o associam ao 32 bits (RGBA). Os poucos que funcionam em indústrias como o DTP que fazem uso pesado da cor têm um conjunto mais rico de termos que incluem correção de cores, espaço colorido e assim por diante. Então, o que exatamente você precisa armazenar?

  • Você precisa armazenar um único formato que não vai mudar?
  • Você precisa armazenar vários formatos e saber qual formato é realmente armazenado (Rgb vs. RGBA vs. CMY vs. HSV etv)? Observe que mesmo algo aparentemente tão simples quanto RGB realmente pode ser Adobe RGB ou srgb.
  • Você precisa armazenar espaço de cores e correção? Nota frequentemente a cor RGB não tem significado sem correção gerenciamento de cor.
  • Você precisa armazenar uma descrição simples de texto ('vermelha', 'limão', 'azeda' etc.)?
  • Você precisa armazenar a cor 'web' (por exemplo, RGB ou RGBA como hexadecimal)?

Se você estiver armazenando o System.Drawing.Color, você precisa armazenar 4 bytes que representam o alfa e os 3 canais de cores. Você pode usar um int tipo de dados.

Se você estiver armazenando o System.Windows.Media.Color (do WPF), existem duas possibilidades, dependendo do uso que você está usando:

  1. Se você está usando apenas as cores do argb, armazene como um int tipo de dados.
  2. Se você estiver usando o Scrgb Formato, você precisa armazenar 4 valores de flutuação (única). Eu sugiro duas maneiras de armazená -lo:
    1. Um tipo definido pelo usuário com 4 campos de flutuação.
    2. Um varchar (comprimento depende da precisão) e armazenamento
      color.ToString(CultureInfo.InvariantCulture)

Bem, eu os armazenaria como códigos hexadecimais de seis dígitos. Isso abre a possibilidade interessante de realmente procurar cores entre outras cores. Se você realmente deseja torná -lo poderoso, mantenha os números Hex Hex, R, G, B em três colunas. Isso permite encontrar cores que contêm muito vermelho ou que sejam semelhantes a outra cor (classificar por diferença média dos três valores).

Depende muito do tipo de cor que você deseja armazenar. Por exemplo. Se for de uma paleta fixa, um curto int ou mesmo um byte não assinado pode ser suficiente.

3 byte rgb ou 4 byte argb (a = alfa, ou seja, a transparência) poderia caber em 32 bits, portanto, um tipo inteiro não assinado de 32 bits funcionaria. Este é o padrão para a maioria dos aplicativos. No entanto, você pode querer mais - nesse caso, um número inteiro não assinado de 64 bits pode ser necessário.

Como alternativa, se você deseja modificar ou consultar a cor de acordo com seus componentes, eu armazenaria cada componente como seus próprios campos alfa não assinados (ou seja, vermelho, verde, azul, alfa).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top