2009-09-10 59 views
8

如果我使用的是.Net和SQL Server 2008,那麼在數據庫中存儲顏色的最佳方式是,我應該使用ToString還是將其轉換爲整數或其他內容?在SQL數據庫中表示顏色的最佳方式?

編輯:

所有我從顏色要的是能夠檢索,並在屏幕上繪製一些在指定的顏色。我不需要能夠查詢它。

回答

16

顏色是如何原生存儲的?

如果你只是使用0xRRGGBB格式,你可以將它作爲一個整數存儲在數據庫中,當你爲了便於閱讀而重新整理它時。

11

如何在數據庫中存儲信息取決於您打算如何使用和訪問它。沒有任何說明存儲它的最佳方式是不知道如何使用它。

+0

史蒂夫卡斯。我在5年內沒有見過你的名字! – 2009-09-10 17:39:12

+0

+1當然,與任何*數據一樣。查找在0x40到0x50之間查找所有像素爲「green」的查詢將受益於存儲到單獨的R,G和B組件(各自編制索引)中。一個要求在10個「透明像素」。記錄需要將A通道分開。或者一些查詢會要求'亮度'並且需要HSV/HSL格式。 – 2009-09-10 18:00:29

6

對於數碼相機,桌面出版,洗衣機等行業來說,顏色可能會令人驚訝地比較棘手。大多數程序員將顏色與24位顏色(通常爲RGB)相關聯,有些則將其與32位(RGBA)相關聯。少數在像DTP這樣大量使用色彩的行業中工作,有更豐富的術語,包括色彩校正,color space等等。那麼你需要存儲什麼?

  • 你需要存儲一個不會改變的格式嗎?
  • 您是否需要存儲多種格式並知道實際存儲的格式(RGB與RGBA與CMY比較HSV etv)?請注意,甚至像RGB這樣簡單的東西實際上可以是Adobe RGBsRGB
  • 您是否需要存儲色彩空間和更正?注意經常RGB顏色沒有意義W/O適當color management
  • 你需要存儲一個簡單的文字描述('紅','石灰','深青色'等)?
  • 您是否需要存儲'網頁'顏色(即RGB或RGBA爲十六進制)?
2

好吧,我會將它們存儲爲六位十六進制代碼。這打開了在其他顏色之間實際搜索顏色的有趣可能性。如果您真的想使其功能強大,請將R,G,B十六進制數字保留在三列中。這可以讓你找到包含這麼多紅色的顏色,或者與另一種顏色相似的顏色(按三個值的平均差異排序)。

+0

即將表明我自己。 HEX-colors是要走的路,imo。 – roosteronacid 2009-09-10 17:36:09

3

如果您要存儲System.Drawing.Color,則需要存儲代表alpha和3個顏色通道的4個字節。您可以使用int數據類型。

如果要存儲的System.Windows.Media.Color(來自WPF),有兩種可能取決於正在使用的用法:

  1. 如果只使用ARGB顏色,存儲爲int數據類型。
  2. 如果您使用ScRGB格式,則需要存儲4個浮點(單個)值。我建議兩種存儲方式:
    1. 一個用戶定義的類型有4個浮點字段。
    2. 一個VARCHAR(長度取決於精度)和存儲
      color.ToString(CultureInfo.InvariantCulture)
1

取決於要存儲顏色的種類那麼多。例如。如果它來自固定的調色板,那麼短整型或甚至無符號字節可能就足夠了。

3字節RGB或4字節ARGB(A = alpha,即透明度)可以適合32位,所以32位無符號整數類型可以工作。這是大多數應用程序的標準。 但是,您可能需要更多 - 在這種情況下,可能需要64位無符號整數。或者,如果你想根據其組件來修改或查詢顏色,我會將每個組件存儲爲它自己的無符號整型(即紅色,綠色,藍色,Alpha字段)。

相關問題