データベースに色を保存する必要があります。
データベースフィールドに、色の名前などで最高の方法で色を保存するにはどうすればよいですか?
HTMLページの場合は、#RRGGBBタグを文字列として保存するだけで十分でしょう。
.NETの場合、ARGB値からの色の構築をサポートします
System.Drawing.Color c = System.Drawing.Color.FromArgb(int);
int x = c.ToArgb();
そのため、そのintを保存することができます。
おそらく、色の値が最適でしょう。 #FFFFFFまたは#FF0000
理想的なストレージ形式は、データベースの使用方法によって異なります。
最も簡単な解決策は、もちろん、すべてを6バイトのASCII RGBカラーの16進文字列として、他の形式をサポートせずに保存するだけです。後で追加の形式をサポートする場合の問題。
読みやすさ、柔軟性、およびアクセスの容易さのため単純な文字列を使用することは良い考えです。 16進数のカラー文字列と生の整数の記憶領域の違いは、ほとんどの場合無視できます。速度を上げるために、インデックスを作成する色フィールドを設定できます。また、柔軟性を高めるために、次の機能を1つ以上追加できます。
検索と並べ替えの速度を最適化するにはおよびディスクの使用、符号なし整数として保存する方法があります。これは、単一の数字は文字列よりも検索が速く、内部的に数ビット程度の小さいものとして保存でき、FromArgb()
および同様の関数を使用してクエリの色チャネルでフィルタリングできるためです。 。欠点は、コードがすべてのクエリのすべてのカラーフィールドで常に前後に変換する必要があることです。これにより、実際にデータベース速度の向上が相殺される可能性があります。
ハイブリッドアプローチは探索する価値があるかもしれません。たとえば、id、rgbhex、cssname、cmyk、hsl、hsv、lab、rgbなどのようなもので構成されるフィールドを持つ、すべての可能な8ビット/チャネルRGB値のテーブルを考えてみましょう。自動化する必要があるでしょうこのようなテーブルは非常に大きいため(16777216エントリ)作成されます。テーブルに16 MB以上追加されますが、このソリューションの利点は、すべてのカラー値が、カラールックアップテーブルへの外部キーにリンクされた単一の整数idフィールドになることです。高速な並べ替えと検索、変換せずに必要なカラーデータ、および非常に拡張性の高いデータ。テーブルを独自のデータベースファイルに保持して、アプリケーション内の他のデータベースまたはスクリプトで共有することもできます。確かに、このソリューションはほとんどの場合、やり過ぎです。
HTML/CSSのように、24ビットまたは32ビットの整数として色を保存します。つまり#FF00CCですが、文字列ではなく整数に変換されます。
整数は、文字列(特にVCHAR)よりも少ないスペースを占有します。
Intとして保存します
ToArgbとFromArgbを使用して、値を設定および取得します。
状況によると思います。色を保存する必要がある場合は、16進表記で問題ありません。特定のカラーチャネルに対してクエリを実行する必要がある場合は、各カラーチャネル(RGB、ARGB、CYMKなど)にsmallintフィールドが必要です。
したがって、シンプルなストレージの場合は、シンプルに保ちます。分析を実行する必要がある場合は、問題の領域に応じて代替オプションを検討する必要があります。
3列のカラールックアップテーブルを用意することをお勧めします。
ID int;名前varchar(40)null; ColorVal char(8)またはint(色の表現方法に応じて)
名前のない色の場合は、名前フィールドをnullのままにしてください
色を保存するためにどの形式を探していますか? CMTK、RGB、Pantone?ちょっと知っておくと便利です。厳密に#RGB 16進形式は、Webカラーやアプリケーションには適していますが、塗料を混ぜようとするのにはあまり適していません。
データベースに色を保存するには:
//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)
Char(9)として保存します。