質問

.Net と SQL Server 2008 を使用している場合、データベースに色を保存する最善の方法は何ですか。ToString を使用するか、整数に変換するか、あるいは他のものに変換する必要がありますか?

編集:

私が色に望むのは、それを取得して、指定した色で画面上に何かを描画できることだけです。それに対してクエリを実行できる必要はありません。

役に立ちましたか?

解決

色はどのようにネイティブに保存されますか?

0xRRGGBB形式のみを使用している場合は、データベースに整数として保存し、 SELECT (読みやすいように)するときに再16進数化することもできます。

他のヒント

データベースに情報を保存する方法は、使用方法とアクセス方法によって異なります。使用方法がわからなくても、それを保存する最良の方法は何も言うことはありません。

デジタル カメラ、デスクトップ パブリッシング、サンナーなどの一部の業界では、色は驚くほど難しい場合があります。ほとんどのプログラマは色を 24 ビット カラー (通常は RGB) と関連付けますが、一部のプログラマはそれを 32 ビット (RGBA) と関連付けます。DTP のような色を多用する業界で働く少数の業界では、色補正を含む豊富な用語セットを持っています。 色空間 などなど。では、具体的に何を保管する必要があるのでしょうか?

  • 変更されない単一の形式を保存する必要がありますか?
  • 複数の形式を保存する必要があり、実際にどの形式が保存されているかを知る必要がありますか (RGB 対RGBA 対CMY vs. HSV etv)?RGB のように一見単純なものでも、実際には次のようなことができることに注意してください。 アドビRGB または sRGB.
  • カラースペースと補正を保存する必要がありますか?多くの場合、RGB カラーは適切なものがなければ意味を持ちません。 カラーマネジメント.
  • 単純なテキストの説明 (「レッド」、「ライム」、「ティール」など) を保存する必要がありますか?
  • 「ウェブ」カラーを保存する必要がありますか (つまり、RGB または RGBA (16 進数) ?

System.Drawing.Color を保存する場合、アルファと3つのカラーチャンネルを表す4バイトを保存する必要があります。 int データ型を使用できます。

System.Windows.Media.Color (WPFから)を保存する場合、使用している用途に応じて2つの可能性があります:

  1. ARGBカラーのみを使用している場合は、 int データ型として保存します。
  2. ScRGB 形式を使用している場合、4つのfloat(単一)を保存する必要があります。値。私はそれを保存する2つの方法を提案します:
    1. 4つのfloatフィールドを持つユーザー定義型。
    2. varchar(長さは精度に依存)および保存
      color.ToString(CultureInfo.InvariantCulture)

まあ、私はそれらを6桁の16進コードとして保存します。これは、実際に他の色の間の色を検索する興味深い可能性を開きます。本当に強力にしたい場合は、R、G、Bの16進数を3列に保持してください。これにより、非常に多くの赤を含む色、または別の色に似た色を見つけることができます(3つの値の平均差でソート)。

保存する色の種類に大きく依存します。例えば。固定パレットからのものである場合、short intまたは符号なしバイトで十分な場合があります。

3バイトのRGBまたは4バイトのARGB(A = alpha、つまり透明度)は32ビットに収まるため、32ビットの符号なし整数型が機能します。これは、ほとんどのアプリケーションの標準です。 ただし、さらに必要な場合があります。この場合、64ビットの符号なし整数が必要になる場合があります。

別の方法として、コンポーネントに応じて色を変更または照会する場合、各コンポーネントを独自の符号なし整数(つまり、赤、緑、青、アルファフィールド)として保存します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top