ImU32 上的 ImGui 颜色选择器
ImGui ColorPicker on ImU32
ImGui 中的颜色选择器适用于浮点向量。
bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
但是我的颜色数据存储在无符号整数中。
我如何让 ColorPicker3 处理 ImU32
值?
注意ImGUI是立即模式API,所以它会改变你下面的值,这意味着转换步骤不容易引入。
包起来?
bool ColorPicker3U32(const char* label, ImU32* color, ImGUIColorEditFlags flags = 0) {
float col[3];
col[0] = (float)((*color >> ) & 0xFF) / 255.0f;
col[1] = (float)((*color >> 8 ) & 0xFF) / 255.0f;
col[2] = (float)((*color >> 16) & 0xFF) / 255.0f;
bool result = ColorPicker3(label, col, flags);
*color = ((ImU32)(col[0] * 255.0f) ) |
((ImU32)(col[1] * 255.0f) << 8) |
((ImU32)(col[2] * 255.0f) << 16);
return result;
}
或类似的东西。
ImGui 中的颜色选择器适用于浮点向量。
bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
但是我的颜色数据存储在无符号整数中。
我如何让 ColorPicker3 处理 ImU32
值?
注意ImGUI是立即模式API,所以它会改变你下面的值,这意味着转换步骤不容易引入。
包起来?
bool ColorPicker3U32(const char* label, ImU32* color, ImGUIColorEditFlags flags = 0) {
float col[3];
col[0] = (float)((*color >> ) & 0xFF) / 255.0f;
col[1] = (float)((*color >> 8 ) & 0xFF) / 255.0f;
col[2] = (float)((*color >> 16) & 0xFF) / 255.0f;
bool result = ColorPicker3(label, col, flags);
*color = ((ImU32)(col[0] * 255.0f) ) |
((ImU32)(col[1] * 255.0f) << 8) |
((ImU32)(col[2] * 255.0f) << 16);
return result;
}
或类似的东西。