source: libpipi/trunk/pipi/colorstring.c

Last change on this file was 2905, checked in by Sam Hocevar, 11 years ago

Remove tabs in the code here and there.

File size: 3.4 KB
Line 
1/*
2 *  libpipi       Pathetic image processing interface library
3 *  Copyright (c) 2004-2008 Sam Hocevar <sam@zoy.org>
4 *                2008 Jean-Yves Lamoureux <jylam@lnxscene.org
5 *                All Rights Reserved
6 *
7 *  $Id$
8 *
9 *  This library is free software. It comes without any warranty, to
10 *  the extent permitted by applicable law. You can redistribute it
11 *  and/or modify it under the terms of the Do What The Fuck You Want
12 *  To Public License, Version 2, as published by Sam Hocevar. See
13 *  http://sam.zoy.org/wtfpl/COPYING for more details.
14 */
15
16/*
17 * colorstring.c: color from string functions
18 */
19
20#include "config.h"
21
22#include <stdio.h>
23#include <stdlib.h>
24#include <stdarg.h>
25#include <string.h>
26
27#include "pipi.h"
28#include "pipi_internals.h"
29
30
31struct color_table
32{
33    char name[255];
34    float a,r,g,b;
35};
36
37struct color_table color_table[] =
38{
39    { "black"  , 1,   0,    0,    0 },
40    { "white"  , 1,   1,    1,    1 },
41    { "red"    , 1,   1,    0,    0 },
42    { "green"  , 1,   0,    1,    0 },
43    { "blue"   , 1,   0,    0,    1 },
44    { "yellow" , 1,   1,    1,    0 },
45    { "cyan"   , 1,   0,    1,    1 },
46    { "magenta", 1,   1,    0,    1 },
47    { "grey"   , 1,   0.5,  0.5,  0.5 },
48    { "gray"   , 1,   0.5,  0.5,  0.5 },
49    { "grey50" , 1,   0.5,  0.5,  0.5 },
50    { "gray50" , 1,   0.5,  0.5,  0.5 },
51    { "grey25" , 1,   0.25, 0.25, 0.25 },
52    { "gray25" , 1,   0.25, 0.25, 0.25 },
53};
54
55
56
57pipi_pixel_t *pipi_get_color_from_string(const char* s)
58{
59    pipi_pixel_t *color;
60
61    if(!s) return NULL;
62
63    color = malloc(sizeof(pipi_pixel_t));
64
65    if(s[0] == '#')
66    {
67        uint32_t c = 0;
68        sscanf(s, "%x", &c);
69
70        color->pixel_float.a = ((c&0xFF000000)>>24) / 255.0f;
71        color->pixel_float.r = ((c&0x00FF0000)>>16) / 255.0f;
72        color->pixel_float.g = ((c&0x0000FF00)>>8)  / 255.0f;
73        color->pixel_float.b = ((c&0x000000FF)>>0)  / 255.0f;
74    }
75    else if(!strncmp(s, "rgb(", 4))
76    {
77        uint32_t r ,g ,b;
78        sscanf(s, "rgb(%u,%u,%u)", &r, &g, &b);
79        color->pixel_float.r = r / 255.0f;
80        color->pixel_float.g = g / 255.0f;
81        color->pixel_float.b = b / 255.0f;
82    }
83    else if(!strncmp(s, "frgb(", 5))
84    {
85        float r ,g ,b;
86        sscanf(s, "frgb(%f,%f,%f)", &r, &g, &b);
87        color->pixel_float.r = r;
88        color->pixel_float.g = g;
89        color->pixel_float.b = b;
90    }
91    else if(!strncmp(s, "argb(", 4))
92    {
93        uint32_t a, r ,g ,b;
94        sscanf(s, "argb(%u,%u,%u,%u)", &a, &r, &g, &b);
95        color->pixel_float.a = a / 255.0f;
96        color->pixel_float.r = r / 255.0f;
97        color->pixel_float.g = g / 255.0f;
98        color->pixel_float.b = b / 255.0f;
99    }
100    else if(!strncmp(s, "fargb(", 5))
101    {
102        float a, r ,g ,b;
103        sscanf(s, "fargb(%f, %f,%f,%f)", &a, &r, &g, &b);
104        color->pixel_float.a = a;
105        color->pixel_float.r = r;
106        color->pixel_float.g = g;
107        color->pixel_float.b = b;
108    }
109    else
110    {
111        unsigned int i;
112        for(i=0; i<sizeof(color_table); i++)
113        {
114            if(!strcasecmp(color_table[i].name,s))
115            {
116                color->pixel_float.a = color_table[i].a;
117                color->pixel_float.r = color_table[i].r;
118                color->pixel_float.g = color_table[i].g;
119                color->pixel_float.b = color_table[i].b;
120                break;
121            }
122        }
123
124
125    }
126    return color;
127}
Note: See TracBrowser for help on using the repository browser.