Add a dedicated FromColor function, as I found using the ColorModel cumbersome.
This commit is contained in:
		
							
								
								
									
										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 ( | ||||
|  | ||||
		Reference in New Issue
	
	Block a user