/bs/palette.go
package bs
import (
"image"
"bytex64.net/code/bitsmash/palette"
)
func findPalette(img image.Image) int {
selected := 0
minimum_error := float64(1e99)
size := img.Bounds().Size()
for i, p := range(palette.Palettes) {
error := float64(0)
for y := 0; y < size.Y; y++ {
for x := 0; x < size.X; x++ {
pixel_color := img.At(x, y)
_, _, _, a := pixel_color.RGBA()
if a < 0x7FFF {
// Don't calculate transparent pixels
continue
}
palette_color := p.Convert(pixel_color)
error += palette_color.(palette.RGB8).Distance(pixel_color)
}
}
if error < minimum_error {
selected = i
minimum_error = error
}
}
return selected
}
func createPaletteMap(pixels []uint8) uint32 {
m := uint32(0);
for _, v := range(pixels) {
m |= 1 << v;
}
return m;
}