Skip to content

Instantly share code, notes, and snippets.

@kbob
Created December 13, 2025 11:18
Show Gist options
  • Select an option

  • Save kbob/01a5ea40cada3ec07be04b47ff35d253 to your computer and use it in GitHub Desktop.

Select an option

Save kbob/01a5ea40cada3ec07be04b47ff35d253 to your computer and use it in GitHub Desktop.
Hue to RGB function
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "2dd830f2",
"metadata": {},
"source": [
"# Hue to RGB\n",
"\n",
"Find a closed form formula to convert a hue value to fully\n",
"saturated RGB555 values."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dac86a5a",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "6bd1cf8d46b44a4289e4157b080ea2e2",
"version_major": 2,
"version_minor": 0
},
"image/png": "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",
"text/html": [
"\n",
" <div style=\"display: inline-block;\">\n",
" <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
" Figure\n",
" </div>\n",
" <img src='data:image/png;base64,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' width=640.0/>\n",
" </div>\n",
" "
],
"text/plain": [
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib widget\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"BITS = 5\n",
"RANGE = 2**BITS - 1\n",
"HUES = 6 * RANGE\n",
"\n",
"hue = np.arange(HUES)\n",
"ramp0 = hue - 0 * RANGE\n",
"ramp1 = hue - 2 * RANGE\n",
"ramp2 = hue - 4 * RANGE\n",
"ramp3 = hue - 6 * RANGE\n",
"r = np.clip(np.maximum(ramp2, -ramp1), 0, RANGE)\n",
"g = np.clip(np.minimum(ramp0, -ramp2), 0, RANGE)\n",
"b = np.clip(np.minimum(ramp1, -ramp3), 0, RANGE)\n",
"\n",
"# # Print the inflections points\n",
"# i = np.array([i for i in range(6 * RANGE) if (i + 1) % RANGE < 3])\n",
"# with np.printoptions(formatter={'int_kind': '{:3d}'.format}):\n",
"# print(f'h {hue[i]}')\n",
"# print(f'r {r[i]}')\n",
"# print(f'g {g[i]}')\n",
"# print(f'b {b[i]}')\n",
"\n",
"fig, axes = plt.subplots(3, sharex=True, sharey=True, facecolor='#222')\n",
"\n",
"V_MARGIN = RANGE // 3\n",
"axes[0].set_ylim(-V_MARGIN, RANGE + V_MARGIN)\n",
"axes[0].set_yticks([0, RANGE])\n",
"axes[2].set_xticks(range(0, 7 * RANGE, RANGE))\n",
"\n",
"for i in range(3):\n",
" axes[i].set_facecolor('#333')\n",
" axes[i].xaxis.set_tick_params(colors='white')\n",
" axes[i].yaxis.set_tick_params(colors='white')\n",
"\n",
"axes[0].plot(ramp2, color='magenta')\n",
"axes[0].plot(-ramp1, color='yellow')\n",
"axes[0].plot(r, color='red')\n",
"\n",
"axes[1].plot(ramp0, color='yellow')\n",
"axes[1].plot(-ramp2, color='cyan')\n",
"axes[1].plot(g, color='green')\n",
"\n",
"axes[2].plot(ramp1, color='cyan')\n",
"axes[2].plot(-ramp3, color='magenta')\n",
"axes[2].plot(b, color='blue')\n",
"\n",
"None"
]
},
{
"cell_type": "markdown",
"id": "2473a8e8",
"metadata": {},
"source": [
"In C:\n",
"\n",
"---\n",
"\n",
" #include <stdint.h>\n",
" \n",
" #define min(a, b) ({int _a = (a), _b = (b); _a < _b ? _b : _b; })\n",
" #define max(a, b) ({int _a = (a), _b = (b); _a > _b ? _a : _b; })\n",
" #define clip(x) (max(0, min(255, x)))\n",
" \n",
" void h11_to_rgb(int hue, uint8_t rgb[3])\n",
" {\n",
" rgb[0] = clip(max(hue - 1020, 510 - hue));\n",
" rgb[1] = clip(min(hue - 0, 1020 - hue));\n",
" rgb[2] = clip(min(hue - 510, 1530 - hue));\n",
" }\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment