func colorToRgb(c color.Color) (int, int, int) {
	r, g, b, _ := c.RGBA()
	return int(r >> 8), int(g >> 8), int(b >> 8)
}
takes an image/color.Color and normalizes it into
r, g, b components in the range of 0-255
package vibrant
import (
	"fmt"
	"image/color"
	"math"
	colorconv "github.com/dayvonjersen/sadbox/color"  
)
type Color int
func (c Color) String() string {
	return c.RGBHex()
}
func (c Color) RGB() (r, g, b int) {
	return unpackColor(int(c))
}
func (c Color) RGBHex() string {
	r, g, b := unpackColor(int(c))
	return fmt.Sprintf("#%02x%02x%02x", r, g, b)
}
func (c Color) TextColor(contrastRatio float64) Color {
	if contrast(0xffffff, int(c)) >= contrastRatio {
		return Color(0xffffff)
	}
	return Color(0)
}
func (c Color) TitleTextColor() Color {
	return c.TextColor(MIN_CONTRAST_TITLE_TEXT)
}
func (c Color) BodyTextColor() Color {
	return c.TextColor(MIN_CONTRAST_BODY_TEXT)
}