From 32a3560bc33fb97809586062f10ba3189fc151e8 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Tue, 21 Jul 2020 21:07:47 +0100 Subject: [PATCH] Add tools/hex/hex-color-average.c --- tools/hex/.gitignore | 2 ++ tools/hex/Makefile | 4 +++ tools/hex/hex-color-average.c | 58 +++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 tools/hex/.gitignore create mode 100644 tools/hex/Makefile create mode 100644 tools/hex/hex-color-average.c diff --git a/tools/hex/.gitignore b/tools/hex/.gitignore new file mode 100644 index 00000000..ccf9afa3 --- /dev/null +++ b/tools/hex/.gitignore @@ -0,0 +1,2 @@ +hex-color-average +hex-color-average.o diff --git a/tools/hex/Makefile b/tools/hex/Makefile new file mode 100644 index 00000000..e62fee0a --- /dev/null +++ b/tools/hex/Makefile @@ -0,0 +1,4 @@ +hex-color-average: hex-color-average.o + +clean: + rm -f hex-color-average diff --git a/tools/hex/hex-color-average.c b/tools/hex/hex-color-average.c new file mode 100644 index 00000000..f6150404 --- /dev/null +++ b/tools/hex/hex-color-average.c @@ -0,0 +1,58 @@ +#include +#include +#include + +static int hexval(int c) +{ + int ret = -1; + switch (c) { + case '0'...'9': + ret = c - '0'; + break; + case 'a'...'f': + ret = c - 'a' + 10; + break; + case 'A'...'F': + ret = c - 'A' + 10; + break; + } + return ret; +} + +int hex2dec(const char *hexstring) +{ + int value = 0, pos = 0, hex; + while ((hex = hexval(hexstring[pos++])) != -1) + value = (value << 4) + hex; + return value; +} + +void usage(const char *command) +{ + printf("Usage: %s \n", command); + exit(1); +} +int main(int argc, char **argv) +{ + double col[6] = { 0 }; + + if (argc < 3) + usage(argv[0]); + + for (int j = 1; j < argc; j++) { + int len = strlen(argv[j]); + for (int i = 0; i < len / 2; i++) { + char buf[3] = { 0 }; + buf[0] = argv[j][i * 2]; + buf[1] = argv[j][i * 2 + 1]; + col[(j - 1) * 3 + i] = hex2dec(buf) / 255.0; + } + } + printf("[%s] { %.2f, %.2f, %.2f }\n", argv[1], col[0], col[1], col[2]); + printf("[%s] { %.2f, %.2f, %.2f }\n", argv[2], col[3], col[4], col[5]); + printf("[ mean ] { %.2f, %.2f, %.2f }\n", + (col[0] + col[3]) / 2.0, + (col[1] + col[4]) / 2.0, + (col[2] + col[5]) / 2.0); +} +