|
- /*
- * libpipi Pathetic image processing interface library
- * Copyright (c) 2004-2008 Sam Hocevar <sam@zoy.org>
- * 2008 Jean-Yves Lamoureux <jylam@lnxscene.org
- * All Rights Reserved
- *
- * $Id$
- *
- * This library is free software. It comes without any warranty, to
- * the extent permitted by applicable law. You can redistribute it
- * and/or modify it under the terms of the Do What The Fuck You Want
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://sam.zoy.org/wtfpl/COPYING for more details.
- */
-
- /*
- * colorstring.c: color from string functions
- */
-
- #include "config.h"
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <string.h>
-
- #include "pipi.h"
- #include "pipi_internals.h"
-
-
- struct color_table
- {
- char name[255];
- float a,r,g,b;
- };
-
- struct color_table color_table[] =
- {
- { "black" , 1, 0, 0, 0 },
- { "white" , 1, 1, 1, 1 },
- { "red" , 1, 1, 0, 0 },
- { "green" , 1, 0, 1, 0 },
- { "blue" , 1, 0, 0, 1 },
- { "yellow" , 1, 1, 1, 0 },
- { "cyan" , 1, 0, 1, 1 },
- { "magenta", 1, 1, 0, 1 },
- { "grey" , 1, 0.5, 0.5, 0.5 },
- { "gray" , 1, 0.5, 0.5, 0.5 },
- { "grey50" , 1, 0.5, 0.5, 0.5 },
- { "gray50" , 1, 0.5, 0.5, 0.5 },
- { "grey25" , 1, 0.25, 0.25, 0.25 },
- { "gray25" , 1, 0.25, 0.25, 0.25 },
- };
-
-
-
- pipi_pixel_t *pipi_get_color_from_string(const char* s)
- {
- pipi_pixel_t *color;
-
- if(!s) return NULL;
-
- color = malloc(sizeof(pipi_pixel_t));
-
- if(s[0] == '#')
- {
- uint32_t c = 0;
- sscanf(s, "%x", &c);
-
- color->pixel_float.a = ((c&0xFF000000)>>24) / 255.0f;
- color->pixel_float.r = ((c&0x00FF0000)>>16) / 255.0f;
- color->pixel_float.g = ((c&0x0000FF00)>>8) / 255.0f;
- color->pixel_float.b = ((c&0x000000FF)>>0) / 255.0f;
- }
- else if(!strncmp(s, "rgb(", 4))
- {
- uint32_t r ,g ,b;
- sscanf(s, "rgb(%u,%u,%u)", &r, &g, &b);
- color->pixel_float.r = r / 255.0f;
- color->pixel_float.g = g / 255.0f;
- color->pixel_float.b = b / 255.0f;
- }
- else if(!strncmp(s, "frgb(", 5))
- {
- float r ,g ,b;
- sscanf(s, "frgb(%f,%f,%f)", &r, &g, &b);
- color->pixel_float.r = r;
- color->pixel_float.g = g;
- color->pixel_float.b = b;
- }
- else if(!strncmp(s, "argb(", 4))
- {
- uint32_t a, r ,g ,b;
- sscanf(s, "argb(%u,%u,%u,%u)", &a, &r, &g, &b);
- color->pixel_float.a = a / 255.0f;
- color->pixel_float.r = r / 255.0f;
- color->pixel_float.g = g / 255.0f;
- color->pixel_float.b = b / 255.0f;
- }
- else if(!strncmp(s, "fargb(", 5))
- {
- float a, r ,g ,b;
- sscanf(s, "fargb(%f, %f,%f,%f)", &a, &r, &g, &b);
- color->pixel_float.a = a;
- color->pixel_float.r = r;
- color->pixel_float.g = g;
- color->pixel_float.b = b;
- }
- else
- {
- unsigned int i;
- for(i=0; i<sizeof(color_table); i++)
- {
- if(!strcasecmp(color_table[i].name,s))
- {
- color->pixel_float.a = color_table[i].a;
- color->pixel_float.r = color_table[i].r;
- color->pixel_float.g = color_table[i].g;
- color->pixel_float.b = color_table[i].b;
- break;
- }
- }
-
-
- }
- return color;
- }
|