Blog/content/posts/2023/c/rgb_to_hex.md
2023-05-14 15:50:24 +03:00

91 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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 <stdio.h>
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);
}
```