[英]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.