如何在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 ',这就是我选择解释示例颜色的方式(当它应该是六位数时只有四位数字)。
你似乎对GL_ALPHA
预处理器符号在OpenGL的头文件中被定义为0x1906
这一事实感到困惑。这不是一种颜色,它是一个格式说明符用于处理像素的OpenGL API调用,因此他们知道期望的格式。
如果你在内存中有一个PNG图像,GL_ALPHA
格式将只对应于图像中的 alpha值(如果存在),上面的内容是完全不同的,因为它构建了一个字符串。OpenGL不需要字符串,它需要一个内存缓冲区来保存所需格式的数据。
请参阅glTexImage2D()
手册页以了解如何工作
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 如何在C++中将十六进制字符串转换为文本数据
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 在Arduino中将字符串转换为(逗号分隔的十六进制)字符串到无符号字符数组
- 将 std::string( "x3BxDEx7C" ) 转换为可读的十六进制字符串?
- 将十六进制转换为 DEC
- C++ 将十六进制字符串表示形式转换为十六进制字符串表示形式
- 字符数组到十六进制字符串的转换 - 意外输出
- C++将 wwn 字符串转换为识别为十六进制的数据类型
- 将字符串存储为十六进制而不进行转换
- 将字符串转换为十六进制数组c++
- 十六进制到十进制转换的未清理答案
- 是否有函数或公式可以在 c++ 中将字符串"of letters"转换为十六进制
- C++十六进制字符串转换为十六进制的字符 *
- 转换十六进制并存储为字节