| // run |
| |
| // Copyright 2026 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| // Derived and simplified from (TestSkimageLabToRGBOutOfGamut): |
| // https://github.com/go-gfx/gfx/blob/main/color/skimage_test.go#L113C6-L113C35 |
| |
| import ( |
| "fmt" |
| "math" |
| ) |
| |
| type Lab struct { |
| L, A, B float64 |
| } |
| |
| func QuantizeUnitToByte(v float64) uint8 { |
| if v <= 0 { |
| return 0 |
| } |
| |
| if v >= 1 { |
| return 255 |
| } |
| |
| return uint8(math.RoundToEven(v * 255)) |
| } |
| |
| func main() { |
| labs := []Lab{ |
| {0.7222675830801158, -0.9031940815103348, 1.301887514238097}, |
| {0.5782818712019121, 0.4553904020428021, -0.6231537217892238}, |
| {1.6473994133908043, 0.699861704410822, 0.3917817900198793}, |
| {-4.466488923617846, 0.3197751169737742, 0.8014614071926937}, |
| {0.33561687336240814, 1.0179747852290575, -0.23495942874439518}, |
| } |
| want := [][3]uint8{{184, 0, 255}, {147, 116, 0}, {255, 178, 100}, {0, 82, 204}, {86, 255, 0}} |
| for i, l := range labs { |
| r, g, b := l.L, l.A, l.B |
| got := [3]uint8{QuantizeUnitToByte(r), QuantizeUnitToByte(g), QuantizeUnitToByte(b)} |
| if got != want[i] { |
| panic(fmt.Sprintf("issue81000: %+v = %v, want %v\n", l, got, want[i])) |
| } |
| } |
| } |