为什么我的 RGB 转十六进制函数在传递颜色分量时返回 0
Why Does My RGB To Hex Function Return 0 When Passing Color Components?
//SOLUTION:使用按位运算符并完全删除流。 Atoi 不能正确接受十六进制。
namespace color_tools{
std::stringstream sstream;
}
int RGB_256_to_hex(signed short r, signed short g, signed short b){
std::string hex_col;
color_tools::sstream << std::hex << r << g << b;
hex_col = color_tools::sstream.str();
color_tools::sstream.str("");
color_tools::sstream.clear();
return atoi(hex_col.c_str());
}
例如,如果我传递 (0,0,255),则该函数返回 0。这是不正确的,因为蓝色是 0000ff。如果我将函数的返回类型更改为字符串并只返回hex_col我会得到正确的结果。我假设问题一定出在 atoi()?
有点跑题了:我可以用 __int8 类型替换带符号的短组件吗,因为它完全适合 256 种颜色步骤?
杂项建议也将不胜感激。
是的,atoi是问题所在。它假定您传递了一个十进制作为其参数,而您已经传递了一个十六进制。它读取数字直到第一个非数字(在您的情况下为四个零)并返回结果。
我认为您最好避免通过流进行这种复杂的转换,并使用简单的按位运算,如移位和 OR,这将显着提高代码的可读性、性能和简单性。
相关文章:
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在内核C++中使用1920x1080x16M图形或类似的16M颜色?(VGA)
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 列表视图更改选择颜色
- GtkTreeView 交替行颜色
- dx11 渲染到纹理仅显示透明颜色
- 使用 OpenGL 4.5 更改所选顶点的颜色
- 为什么我的 LEGACY OPENGL 颜色反转了?
- 具有 2 个分量的数组的特征映射到 3 的向量
- 双击更改 mfc 中列表控件中的行的颜色
- 更改 QT 中按钮的颜色
- 当我使用CHAR_INFO结构时,控制台会无缘无故地改变颜色
- 列表视图项的替代颜色
- GLSL 将 uint 转换为浮点颜色
- std::带有颜色和标题的 clog 包装器无法正确打印整数
- Vec3b:r/g/b 颜色的最大值为 254,而不是 255
- CUDA - 将 float3 数组的 (x,y,z) 分量的最小值/最大值分开?
- 为什么我的 RGB 转十六进制函数在传递颜色分量时返回 0
- 如何执行FFT2D(快速傅里叶变换2D) R, G, B颜色分量