cmd
This commit is contained in:
BIN
cmd/showpalette/.show.go.swp
Normal file
BIN
cmd/showpalette/.show.go.swp
Normal file
Binary file not shown.
74
cmd/showpalette/show.go
Normal file
74
cmd/showpalette/show.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/csv"
|
||||
"image"
|
||||
"image/color"
|
||||
"image/png"
|
||||
"math"
|
||||
"os"
|
||||
|
||||
imgutil "git.niplace.ru/XoxJlopeZi4BB/imageutils/pkg"
|
||||
)
|
||||
|
||||
func nearestHighSqrt(n int) int {
|
||||
if math.Mod(math.Sqrt(float64(n)), 1) == 0 {
|
||||
return n
|
||||
}
|
||||
return nearestHighSqrt(n + 1)
|
||||
}
|
||||
|
||||
type showColors struct {
|
||||
color.Palette
|
||||
}
|
||||
|
||||
func (s showColors) ColorModel() color.Model {
|
||||
return color.RGBAModel
|
||||
}
|
||||
|
||||
func (s showColors) Bounds() image.Rectangle {
|
||||
n := nearestHighSqrt(len(s.Palette))
|
||||
return image.Rect(0, 0, n, n)
|
||||
}
|
||||
|
||||
func (s showColors) At(x, y int) color.Color {
|
||||
n := nearestHighSqrt(len(s.Palette))
|
||||
return s.Palette[y*n+x]
|
||||
}
|
||||
|
||||
func check(err error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func Must[T any](v T, err error) T {
|
||||
check(err)
|
||||
return v
|
||||
}
|
||||
|
||||
func Map[S1 ~[]T1, S2 ~[]T2, T1, T2 any](s S1, f func(T1) T2) S2 {
|
||||
result := make(S2, len(s))
|
||||
for i := range s {
|
||||
result[i] = f(s[i])
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func main() {
|
||||
r := csv.NewReader(os.Stdin)
|
||||
r.TrailingComma = true
|
||||
colors, err := r.Read()
|
||||
check(err)
|
||||
palette := color.Palette(
|
||||
Map[[]string, color.Palette](colors,
|
||||
func(v string) color.Color {
|
||||
println(v + "cat-v")
|
||||
return Must(imgutil.ParseHexColor(v))
|
||||
},
|
||||
),
|
||||
)
|
||||
|
||||
err = png.Encode(os.Stdout, showColors{palette})
|
||||
check(err)
|
||||
}
|
||||
Reference in New Issue
Block a user