2010-02-26 35 views
2

如果存在整數值,例如。 86那麼我如何從這個整數值中提取r,g,b分量......? 我正在使用Visual C++ 2008快速版。 謝謝..從整數值中提取rgb顏色分量

+0

在這個整數首先編碼的RGB組件是如何? –

+0

讓我解釋什麼,我已經uptil現在做... 我看了文件內容轉換成字節數組, 所以現在的字節數組從0值有 - 255, 現在我有一個圖片來顯示這些數組值控制, 所以我用, 位圖^ bmp; BMP-> SetPixel(I,J,顏色:: FromArgb(BUF [COUNT]); // BUF是字節數組 但是這個代碼不顯示任何內容,所以 我發現,也許如果我提取rgb組件,並將它們作爲參數在Color :: FromArbg(int red,int green,int blue)中, 那麼它可能會工作.. 例如,如果我有值86,那麼我如何從它獲得rgb組件? – JAYMIN

回答

10

通常(我經常重複,因爲你沒有在你的問題中指定太多),顏色被打包在一個4字節的整數與RGBA組件。

你需要做的是面具和轉移,例如:

int color = 0xRRGGBBAA; 

u8 red = (color & 0xFF000000) >> 24; 
u8 green = (color & 0x00FF0000) >> 16; 
u8 blue = (color & 0x0000FF00) >> 8; 

這是假設的那種我指定的編碼,但可以根據您的修改。

編輯: 在你的例子中,你談到了0-255的值。目前尚不清楚組件是否爲2位大小(每個組件有4個強度值)。

在這種情況下,該方法仍然是相同的,但你將有隻有幾顏色:

u8 color = 86; 

// so you take 2 bits and multiply by 64 to possibly have intensities: 0, 64, 128, 192 
u8 red = ((color & 0xC0) >> 6) * 64; 
u8 green = ((color & 0x30) >> 4) * 64; 
u8 blue = ((color & 0x0C) >> 2) * 64; 

EDIT2:也許你的顏色索引調色板,在這種情況下,你應該有一個陣列,存儲調色板本身和從文件中讀取的字節應該是存儲在別處的顏色索引。

+0

謝謝! – JAYMIN

0

通常情況下,您想使用RGB宏從三個組件創建顏色。假設您擁有的值是相同的格式,您可以使用GetRValue,GetGValueGetBValue將其拆回個別部分。