如何在c++中将RGB颜色值转换为十六进制值

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

本文关键字:转换 十六进制 颜色值 RGB c++ 中将      更新时间:2023-10-16

在我的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 ',这就是我选择解释示例颜色的方式(当它应该是六位数时只有四位数字)。

你似乎对GL_ALPHA预处理器符号在OpenGL的头文件中被定义为0x1906这一事实感到困惑。这不是一种颜色,它是一个格式说明符用于处理像素的OpenGL API调用,因此他们知道期望的格式。

如果你在内存中有一个PNG图像,GL_ALPHA格式将只对应于图像中的 alpha值(如果存在),上面的内容是完全不同的,因为它构建了一个字符串。OpenGL不需要字符串,它需要一个内存缓冲区来保存所需格式的数据。

请参阅glTexImage2D()手册页以了解如何工作