forked from MTSR/mapserver
46 lines
805 B
Go
46 lines
805 B
Go
|
package colormapping
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"image/color"
|
||
|
"image/png"
|
||
|
)
|
||
|
|
||
|
type Palette struct {
|
||
|
colors map[int]*color.RGBA
|
||
|
}
|
||
|
|
||
|
func NewPalette(imagefile []byte) (*Palette, error) {
|
||
|
palette := &Palette{
|
||
|
colors: make(map[int]*color.RGBA),
|
||
|
}
|
||
|
|
||
|
reader := bytes.NewReader(imagefile)
|
||
|
img, err := png.Decode(reader)
|
||
|
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
bounds := img.Bounds()
|
||
|
|
||
|
index := 0
|
||
|
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
|
||
|
for x := bounds.Min.X; x < bounds.Max.X; x++ {
|
||
|
c := img.At(x, y)
|
||
|
r, g, b, a := c.RGBA()
|
||
|
|
||
|
//fmt.Println("x ", x, " y ", y, " Index: ", index, " Color ", c)
|
||
|
palette.colors[index] = &color.RGBA{uint8(r), uint8(g), uint8(b), uint8(a)}
|
||
|
|
||
|
index++
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return palette, nil
|
||
|
}
|
||
|
|
||
|
func (m *Palette) GetColor(param2 int) *color.RGBA {
|
||
|
return m.colors[param2]
|
||
|
}
|