web-dev-qa-db-ja.com

データベースフィールドに色を保存するにはどうすればよいですか?

データベースに色を保存する必要があります。

データベースフィールドに、色の名前などで最高の方法で色を保存するにはどうすればよいですか?

43
Dhana

HTMLページの場合は、#RRGGBBタグを文字列として保存するだけで十分でしょう。

.NETの場合、ARGB値からの色の構築をサポートします

System.Drawing.Color c = System.Drawing.Color.FromArgb(int);

int x = c.ToArgb();

そのため、そのintを保存することができます。

37
Eoin Campbell

おそらく、色の値が最適でしょう。 #FFFFFFまたは#FF0000

14
Jimmeh

理想的なストレージ形式は、データベースの使用方法によって異なります。

最も簡単な解決策は、もちろん、すべてを6バイトのASCII RGBカラーの16進文字列として、他の形式をサポートせずに保存するだけです。後で追加の形式をサポートする場合の問題。

読みやすさ、柔軟性、およびアクセスの容易さのため単純な文字列を使用することは良い考えです。 16進数のカラー文字列と生の整数の記憶領域の違いは、ほとんどの場合無視できます。速度を上げるために、インデックスを作成する色フィールドを設定できます。また、柔軟性を高めるために、次の機能を1つ以上追加できます。

  • NULL、空白、または無効の場合、コンテキストのデフォルト色を想定
  • 省略された場合、FF(不透明)と仮定して、オプションの末尾のアルファバイト00-FFを受け入れます。
  • フル(AABBCC)構文とショートハンド(ABC)構文の両方を受け入れます。これは、サイズが半分で、入力が速く、CSSでサポートされています
  • 一般的なオプションの先頭#桁をサポート
  • 「rgba(255,255,255,1)」や「red」など、CSSがサポートするものをすべて保持するために、生の文字列をサポートします。
  • 「cmyk()、hsv()、hsl()、lab()」などのカスタムカラーモード文字列をサポートします。
  • RGB(A)16進文字列が#で始まるか、長さが3、4、6、または8で、[0-9A-Fa-f]のみを含む場合

検索と並べ替えの速度を最適化するにはおよびディスクの使用、符号なし整数として保存する方法があります。これは、単一の数字は文字列よりも検索が速く、内部的に数ビット程度の小さいものとして保存でき、FromArgb()および同様の関数を使用してクエリの色チャネルでフィルタリングできるためです。 。欠点は、コードがすべてのクエリのすべてのカラーフィールドで常に前後に変換する必要があることです。これにより、実際にデータベース速度の向上が相殺される可能性があります。

ハイブリッドアプローチは探索する価値があるかもしれません。たとえば、id、rgbhex、cssname、cmyk、hsl、hsv、lab、rgbなどのようなもので構成されるフィールドを持つ、すべての可能な8ビット/チャネルRGB値のテーブルを考えてみましょう。自動化する必要があるでしょうこのようなテーブルは非常に大きいため(16777216エントリ)作成されます。テーブルに16 MB以上追加されますが、このソリューションの利点は、すべてのカラー値が、カラールックアップテーブルへの外部キーにリンクされた単一の整数idフィールドになることです。高速な並べ替えと検索、変換せずに必要なカラーデータ、および非常に拡張性の高いデータ。テーブルを独自のデータベースファイルに保持して、アプリケーション内の他のデータベースまたはスクリプトで共有することもできます。確かに、このソリューションはほとんどの場合、やり過ぎです。

13
Beejor

HTML/CSSのように、24ビットまたは32ビットの整数として色を保存します。つまり#FF00CCですが、文字列ではなく整数に変換されます。

整数は、文字列(特にVCHAR)よりも少ないスペースを占有します。

13
rjstelling

Intとして保存します

ToArgbとFromArgbを使用して、値を設定および取得します。

4
Geoff Appleford

状況によると思います。色を保存する必要がある場合は、16進表記で問題ありません。特定のカラーチャネルに対してクエリを実行する必要がある場合は、各カラーチャネル(RGB、ARGB、CYMKなど)にsmallintフィールドが必要です。

したがって、シンプルなストレージの場合は、シンプルに保ちます。分析を実行する必要がある場合は、問題の領域に応じて代替オプションを検討する必要があります。

3
Ryan Emerle

3列のカラールックアップテーブルを用意することをお勧めします。

ID int;名前varchar(40)null; ColorVal char(8)またはint(色の表現方法に応じて)

名前のない色の場合は、名前フィールドをnullのままにしてください

1
C. Ross

色を保存するためにどの形式を探していますか? CMTK、RGB、Pantone?ちょっと知っておくと便利です。厳密に#RGB 16進形式は、Webカラーやアプリケーションには適していますが、塗料を混ぜようとするのにはあまり適していません。

0

データベースに色を保存するには:

     //Save this int value in database
    int argb = colorDialog1.Color.ToArgb();

また、データベースの使用からそれを取得するには:

    //argb is the value of color stored in database in prev. section
    Color.FromArgb(argb)
0

Char(9)として保存します。

  • 「#」記号が含まれているため、コードに追加してすぐに使用する必要がありません
  • Ncharの代わりに通常のchar
  • 透明度を保存します
0
Jowen

色がWebカラーに制限されている場合は、16進表記を使用します。

たとえば、青の場合は#0000FFです。

詳細はこちら: http://en.wikipedia.org/wiki/Web_colors

0
Gerrie Schenck