2014-11-24 35 views
0

我現在開始在C項目,使用Minix和我想創建一個RGB()函數,我應該給作爲參數0和255之間的三個數字,它返回一種顏色。RBG C顏色發生器

#define BLACK rgb(0,0,0) 
#define BLUE rgb(0,0,255) 
#define CYAN rgb(0,255,255) 

任何想法我能做到嗎?

乾杯

+0

你做了什麼?舉個例子說明你想要什麼? – smttsp 2014-11-24 18:48:40

+0

您是否知道採用RGB - >單色的公式? – 2014-11-24 18:49:01

+0

'返回一種顏色'是什麼意思?你有什麼想返回 – 2014-11-24 18:50:59

回答

1

是你的顏色由任何一個32位無符號整數的以下形式?

0x00RRGGBB 

如果是這樣的:

unsigned long int 
rgb (const unsigned char r, const unsigned char g, const unsigned char b) 
{ 
    return (r<<16) | (g<<8) | b; 
} 

應該做的伎倆。如果您有BGR而不是RGB,請更改周圍的班次。

unsigned long用於上面,但uint32_t在技術上更好。

+0

更好使它成爲'unsigned long'。 int僅被定義爲保存16位或更多位 – 2014-11-24 19:03:40

+0

看起來應該起作用。問題是我應該通過它作爲十六進制代碼。 – Verance 2014-11-24 19:03:42

+0

將它作爲十六進制代碼傳遞給它?使用'sprintf(「%08x」,rgb(r,g,b))'或類似的方法像平常一樣轉換爲十六進制。 – abligh 2014-11-24 19:11:07

-1

入住此BTW:http://i.stack.imgur.com/PzAWb.png

我不知道如何使用此面具看起來更加友好

對於那些誰抱怨說,我不清楚,我會嘗試指定一點點。 想象一下,我們的目標,現在是繪製一個正方形,我有這樣的功能:

int test_square(unsigned short x, unsigned short y, unsigned short size, unsigned long color) { 
    vg_init(0x105); 
    int i, j; 
    for (i = x; i < x+size; i++) { 
     for (j = y; j < y+size; j++) { 
      vg_set_pixel(i, j, color); 
     } 
    } 
    sleep(5); 
    vg_exit(); 
} 

再簡化一下,因爲很快我將需要比這更創造我自己的圖形和東西,我想通過他們的名字來調用顏色,在每個該死的時間搜索調色板。所以我想調用的函數test_square這樣的:

test_square(25,25,100,BLUE); 

,而不是:

// test_square(25,25,100,0x32); 

爲此,我定義的宏的負載,即:

#define BLACK rgb(0, 0, 0) 
#define BLUE rgb(0, 0, 255) 
#define CYAN rgb(0, 255, 255) 
#define DARK_GRAY rgb(169, 169, 169) 

這將需要一個rbg函數將這些0, 0, 255轉換爲十六進制代碼。

感謝您的幫助,我幾乎在您的幫助下獲得了幫助。非常感激。

+0

你可能會把它分成兩部分:預處理宏可以將三個十進制值轉換成單個32位值。但是,那麼您需要像'sprintf'這樣的實際運行時代碼將該值轉換爲文本十六進制代碼。 – 2014-11-24 20:34:43

+0

我該怎麼做? :\ – Verance 2014-11-24 20:53:16

+0

從我可以看到谷歌,功能'vg_set_pixel'不需要一個十六進制代碼的顏色,它需要一個無符號整數。不幸的是,我發現的文檔中沒有關於該int格式的信息,所以你必須找到一些更好的文檔。 – 2014-11-24 21:01:27