--- title: "🔰 Преобразование цвета RGB в HEX на Си" date: 2023-05-14T15:50:00+03:00 draft: false tags: [c, tips] --- ## Примеры преобразования RGB в HEX и обратно Код очень простой. Выкладываю пример, остальное сами. ## RGB -> HEX Значение аргумента `0` в функции `printf()` — красный цвет. `128` — зелёный цвет и `64` — синий цвет. ```c #include int main(int argc, char const *argv[]) { printf("#%.2x%.2x%.2x\n", 0, 128, 64); return 0; } ``` ## HEX -> RGB ### Пример № 1 Очень простой пример. Строка `primary_color` хранит значение цвета. Функцией `sscanf()` разбиваем её на три значения: - `r` — красный цвет. - `g` — зелёный цвет. - `b` — синий цвет. ```c #include int main(int argc, char const *argv[]) { char *primary_color = "0000FF"; int r, g, b; sscanf(primary_color, "%02x%02x%02x", &r, &g, &b); printf("%d, %d, %d\n", r, g, b); } ``` ### Пример № 2 ```c #include int main(int argc, char const *argv[]) { int secondary_color = 0x32011E; double dR, dG, dB; dR = ((secondary_color >> 16) & 0xff); dG = ((secondary_color >> 8) & 0xFF); dB = ((secondary_color) & 0xFF); printf("%.lf, %.lf, %.lf\n", dR, dG, dB); } ``` И тоже самое, но с некоторыми отличиями. ```c #include int main(int argc, char const *argv[]) { int secondary_color = 0x32011E; double dR, dG, dB; dR = ((secondary_color >> 16) & 0xff) / 255.0; dG = ((secondary_color >> 8) & 0xFF) / 255.0; dB = ((secondary_color) & 0xFF) / 255.0; printf("%.lf, %.lf, %.lf\n", dR * 255, dG * 255, dB * 255); } ```