ParseHexColor parses "#rrggbb" or "rrggbb" (case-insensitive) into an RGB. Returns ok=false for any malformed input.
(s string)
| 28 | // ParseHexColor parses "#rrggbb" or "rrggbb" (case-insensitive) into an RGB. |
| 29 | // Returns ok=false for any malformed input. |
| 30 | func ParseHexColor(s string) (RGB, bool) { |
| 31 | s = strings.TrimSpace(s) |
| 32 | s = strings.TrimPrefix(s, "#") |
| 33 | if len(s) != 6 { |
| 34 | return RGB{}, false |
| 35 | } |
| 36 | var vals [3]uint8 |
| 37 | for i := 0; i < 3; i++ { |
| 38 | hi, ok1 := hexNibble(s[i*2]) |
| 39 | lo, ok2 := hexNibble(s[i*2+1]) |
| 40 | if !ok1 || !ok2 { |
| 41 | return RGB{}, false |
| 42 | } |
| 43 | vals[i] = hi<<4 | lo |
| 44 | } |
| 45 | return RGB{R: vals[0], G: vals[1], B: vals[2]}, true |
| 46 | } |
| 47 | |
| 48 | func hexNibble(b byte) (uint8, bool) { |
| 49 | switch { |