53 lines
984 B
Go
53 lines
984 B
Go
package main
|
|
|
|
import "os"
|
|
import "io"
|
|
import "log"
|
|
import "fmt"
|
|
import "image"
|
|
import _ "image/png"
|
|
|
|
func main () {
|
|
output, err := os.OpenFile("video.bin", os.O_CREATE | os.O_WRONLY | os.O_TRUNC, 0644)
|
|
if err != nil { log.Fatal(err) }
|
|
|
|
for frame := 1; frame <= 2516; frame ++ {
|
|
input, err := os.Open(fmt.Sprintf("png/%d.png", frame))
|
|
if err != nil { log.Fatal(err) }
|
|
err = convert(input, output)
|
|
if err != nil { log.Fatal(err) }
|
|
input.Close()
|
|
}
|
|
|
|
output.Close()
|
|
}
|
|
|
|
func convert (input io.Reader, output io.Writer) (err error) {
|
|
var im image.Image
|
|
im, _, err = image.Decode(input)
|
|
if err != nil { return err }
|
|
|
|
buffer := [72]byte { }
|
|
|
|
index := 0
|
|
for y := 0; y < 24; y ++ {
|
|
bit := byte(0)
|
|
for x := 0; x < 24; x ++ {
|
|
red, _, _, _ := im.At(x, y).RGBA()
|
|
bitState := byte(0)
|
|
if red > 0x8000 { bitState = 1 }
|
|
buffer[index] |= bitState << (7 - bit)
|
|
|
|
bit ++
|
|
if bit >= 8 {
|
|
bit = 0
|
|
index ++
|
|
}
|
|
}
|
|
}
|
|
|
|
output.Write(buffer[:])
|
|
|
|
return
|
|
}
|