33 lines
624 B
Go
33 lines
624 B
Go
package imageutils
|
|
|
|
import (
|
|
"fmt"
|
|
"image/color"
|
|
"errors"
|
|
)
|
|
|
|
var ParseHexColorErr = errors.New("invalid length, must be 7 or 4")
|
|
|
|
func ParseHexColor(s string) (c color.RGBA, err error) {
|
|
c.A = 0xff
|
|
switch len(s) {
|
|
case 7:
|
|
_, err = fmt.Sscanf(s, "#%02x%02x%02x", &c.R, &c.G, &c.B)
|
|
case 4:
|
|
_, err = fmt.Sscanf(s, "#%1x%1x%1x", &c.R, &c.G, &c.B)
|
|
// Double the hex digits:
|
|
c.R *= 17
|
|
c.G *= 17
|
|
c.B *= 17
|
|
default:
|
|
err = ParseHexColorErr
|
|
|
|
}
|
|
return
|
|
}
|
|
|
|
func ColorToHex(c color.Color) string {
|
|
r, g, b, _ := color.NRGBAModel.Convert(c).RGBA()
|
|
return fmt.Sprintf("#%02x%02x%02x", byte(r), byte(g), byte(b))
|
|
}
|