簡體   English   中英

如何在C ++中將RGB顏色值轉換為十六進制值?

[英]how to convert a RGB color value to an hexadecimal value in C++?

在我的C ++應用程序中,我用紅色,綠色和藍色值表示png圖像的顏色。 我將這些值存儲在三個整數中。

如何將RGB值轉換為等效的十六進制值?

這種格式的示例0x1906

編輯:我將格式保存為GLuint。

將每種顏色的適當位存儲為至少24位(如long )的無符號整數:

unsigned long createRGB(int r, int g, int b)
{   
    return ((r & 0xff) << 16) + ((g & 0xff) << 8) + (b & 0xff);
}

現在代替:

unsigned long rgb = 0xFA09CA;

你可以做:

unsigned long rgb = createRGB(0xFA, 0x09, 0xCA);

請注意,以上內容不涉及Alpha通道。 如果您還需要編碼alpha(RGBA),則需要以下代碼:

unsigned long createRGBA(int r, int g, int b, int a)
{   
    return ((r & 0xff) << 24) + ((g & 0xff) << 16) + ((b & 0xff) << 8)
           + (a & 0xff);
}

如果需要,請用GLuint替換unsigned long

如果要構建字符串,則可以使用snprintf()

const unsigned red = 0, green = 0x19, blue = 0x06;
char hexcol[16];

snprintf(hexcol, sizeof hexcol, "%02x%02x%02x", red, green, blue);

這將001906" in hexcol`中構建字符串001906" in ,這就是我選擇解釋示例顏色的方式(當顏色應為6時只有4位)。

您似乎對GL_ALPHA預處理器符號在OpenGL的頭文件中定義為0x1906的事實感到困惑。 這不是顏色,它是用於處理像素的OpenGL API調用使用的格式說明符 ,因此他們知道期望的格式。

如果內存中有PNG圖像,則GL_ALPHA格式將與圖像中的alpha值(如果存在)相對應,上述內容完全不同,因為它會生成字符串。 OpenGL不需要字符串,而是需要一個內存中的緩沖區來保存所需格式的數據。

請參閱glTexImage2D()手冊頁以獲取有關其工作原理的討論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM