Add a dedicated FromColor function, as I found using the ColorModel cumbersome.
This commit is contained in:
parent
0414ffd8b9
commit
721c13c4c6
41
oklab.go
41
oklab.go
@ -106,6 +106,29 @@ func FromRGBA(r, g, b, a uint32) Color {
|
||||
return FromNRGBA(r, g, b, a)
|
||||
}
|
||||
|
||||
// FromColor converts an arbitrary color type to an OKLab [Color], with special handling
|
||||
// for [color.NRGBA], [color.NRGBA64], and anything implementing the [NRGBAColor] interface
|
||||
// to preserve transparent colors.
|
||||
func FromColor(c color.Color) Color {
|
||||
switch c := c.(type) {
|
||||
case Color:
|
||||
return c
|
||||
|
||||
// Special handling for [color.NRGBA] and [color.NRGBA64]
|
||||
case color.NRGBA:
|
||||
return FromNRGBA(uint32(c.R)*0x101, uint32(c.G)*0x101, uint32(c.B)*0x101, uint32(c.A)*0x101)
|
||||
|
||||
case color.NRGBA64:
|
||||
return FromNRGBA(uint32(c.R), uint32(c.G), uint32(c.B), uint32(c.A))
|
||||
|
||||
case NRGBAColor:
|
||||
return FromNRGBA(c.NRGBA())
|
||||
|
||||
default:
|
||||
return FromRGBA(c.RGBA())
|
||||
}
|
||||
}
|
||||
|
||||
func cube(v float64) float64 {
|
||||
return v * v * v
|
||||
}
|
||||
@ -158,23 +181,7 @@ type NRGBAColor interface {
|
||||
}
|
||||
|
||||
func okLabModel(c color.Color) color.Color {
|
||||
switch c := c.(type) {
|
||||
case Color:
|
||||
return c
|
||||
|
||||
// Special handling for color.NRGBA and color.NRGBA64
|
||||
case color.NRGBA:
|
||||
return FromNRGBA(uint32(c.R)*0x101, uint32(c.G)*0x101, uint32(c.B)*0x101, uint32(c.A)*0x101)
|
||||
|
||||
case color.NRGBA64:
|
||||
return FromNRGBA(uint32(c.R), uint32(c.G), uint32(c.B), uint32(c.A))
|
||||
|
||||
case NRGBAColor:
|
||||
return FromNRGBA(c.NRGBA())
|
||||
|
||||
default:
|
||||
return FromRGBA(c.RGBA())
|
||||
}
|
||||
return FromColor(c)
|
||||
}
|
||||
|
||||
var (
|
||||
|
Loading…
x
Reference in New Issue
Block a user