68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"image/color"
|
|
"image/png"
|
|
"maps"
|
|
"os"
|
|
"slices"
|
|
|
|
imgutil "git.niplace.ru/XoxJlopeZi4BB/imageutils/pkg"
|
|
)
|
|
|
|
func check(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
type Set[S comparable] map[S]struct{}
|
|
|
|
func (s Set[S]) Add(v S) {
|
|
s[v] = struct{}{}
|
|
}
|
|
|
|
func (s Set[S]) Contains(v S) bool {
|
|
_, ok := s[v]
|
|
return ok
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
type hex string
|
|
|
|
func (h hex) String() string {
|
|
return string(fmt.Sprintf("hex value: %s\n", string(h)))
|
|
}
|
|
|
|
func main() {
|
|
img, err := png.Decode(os.Stdin)
|
|
check(err)
|
|
p := Set[color.Color]{}
|
|
for y := 0; y < img.Bounds().Dy(); y++ {
|
|
for x := 0; x < img.Bounds().Dx(); x++ {
|
|
p.Add(img.At(x, y))
|
|
}
|
|
}
|
|
w := csv.NewWriter(os.Stdout)
|
|
s := Map[color.Palette, []string](
|
|
slices.Collect(maps.Keys(p)), imgutil.ColorToHex,
|
|
)
|
|
/*
|
|
h := make([]hex, 0, len(s))
|
|
for i := range s {
|
|
h = append(h, hex(s[i]))
|
|
}
|
|
*/
|
|
err = w.Write(s)
|
|
check(err)
|
|
}
|