/bs/new.go
package bs
import (
"log"
"os"
_ "image/png"
"bytex64.net/code/bitsmash/packet"
)
type EncodeOpts struct {
Optimize int
Palette int
}
type BitSmash struct {
size int
palette int
paletteMap uint32
packetList []packet.Packet
}
func NewFromPixels(pixels []uint8, size int, opts *EncodeOpts) BitSmash {
bs := BitSmash{
size,
opts.Palette,
createPaletteMap(pixels),
make([]packet.Packet, 0, 1),
}
i := 0
for i < len(pixels) {
packet := findOptimalEncoding(pixels[i:], opts.Optimize)
i += packet.Length()
bs.packetList = append(bs.packetList, packet)
}
bs.packetList = findRepeats(bs.packetList)
return bs
}
func NewFromImage(filename string, opts *EncodeOpts) BitSmash {
image := loadImage(filename, opts)
size := image.Bounds().Size().X
return NewFromPixels(getPixelList(image), size, opts)
}
func NewFromFile(filename string) BitSmash {
bs := BitSmash{
0,
0,
0,
nil,
}
file, err := os.Open(filename)
defer file.Close()
if err != nil {
log.Fatalf("Failed to open: %v", err)
}
err = bs.ReadFrom(file)
if err != nil {
log.Fatalf("Reading file: %v", err)
}
return bs
}