C#中RGB顏色值與整型值的轉換

來源:互聯網
上載者:User

      這兩天看以前一個系統的資料庫時,發現其中有個Color欄位,顯然是儲存顏色的。但欄位類型卻是Integer,儲存的值是一長串數字。一時犯糊,跑去問經理數字怎麼換算成R、G、B三個值啊?經理說你難道不知道RGB函數嗎?哦,想起來了。用VB開發的朋友應該都知道這個函數,確切的說是一個宏,在MSDN6中找到它的定義:
#define RGB(r, g ,b)  ((DWORD) (((BYTE) (r) | \ ((WORD) (g) << 8)) | \ (((DWORD) (BYTE) (b)) << 16)))

      也許您跟我一樣電腦基礎學的不好,看到這堆東東有點暈。那麼看下面這個它效果相同的公式就明白了:
RGB = R + G * 256 + B * 256 * 256

      C#中沒有RGB函數,不過知道了原理,馬上能寫一個出來。
      辦法一,笨辦法,效率也低,但是好理解,呵呵。

int rgb = 202 + 69 * 256 + 137 * 256 * 256;
int b = rgb / (256 * 256);
int g = (rgb - b * 256 * 256) / 256;
int r = (rgb - b * 256 * 256 - g * 256);

辦法二:網上找來的,用移位做,號稱是最高效的辦法。不過按MSDN上說的,uint、ushort等類型不符合CLS,不知道會有什麼問題。
uint ParseRGB(Color color)
{
    return (uint)(((uint)color.B << 16) | (ushort)(((ushort)color.G << 8) | color.R));
}

Color RGB(int color)
{
    int r = 0xFF & color;
    int g = 0xFF00 & color;
    g >>= 8;
    int b = 0xFF0000 & color;
    b >>= 16;
    return Color.FromArgb(r, g, b);
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.