commit 221de059e54e8eeba1d1520bec877dec7b7c8979 Author: Sasha Koshka Date: Sat Dec 3 16:12:39 2022 -0500 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36b0d76 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/video.bin +/png diff --git a/badapple.lua b/badapple.lua new file mode 100644 index 0000000..c48905a --- /dev/null +++ b/badapple.lua @@ -0,0 +1,40 @@ +local monitor = peripheral.find("monitor") +monitor.setTextScale(0.5) + +videoFile = fs.open("video.bin", "rb") +videoData = videoFile.readAll() + +monitor.clear() + +function drawFrame (frame) + local byteIndex = frame * 24 * 3 + + for y = 1, 24 do + monitor.setCursorPos(5, y + 2) + for x = 1, 3 do + byteIndex = byteIndex + 1 + drawByte(videoData:byte(byteIndex)) + end + end +end + +function drawByte (byte) + local divisor = 0x80 + + for i = 1, 8 do + local bit = ((byte / divisor) % 2) >= 1 + if bit then + monitor.setBackgroundColor(colors.white) + else + monitor.setBackgroundColor(colors.black) + end + monitor.write(" ") + divisor = divisor / 2 + end +end + +for index = 1, 2516 do + drawFrame(index) + os.sleep(0.1) + -- os.sleep(0.5) +end diff --git a/convert.sh b/convert.sh new file mode 100644 index 0000000..71174ea --- /dev/null +++ b/convert.sh @@ -0,0 +1,7 @@ +echo "extracting frames" +mkdir -p png +ffmpeg -i vid.mp4 -vf fps=8 png/%d.png +echo "resizing" +magick mogrify -resize 24x24 png/*.png +echo "packing" +go run . diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..8069969 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module git.tebibyte.media/sashakoshka/badapple-cc + +go 1.19 diff --git a/main.go b/main.go new file mode 100644 index 0000000..4b73489 --- /dev/null +++ b/main.go @@ -0,0 +1,52 @@ +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 +} diff --git a/vid.mp4 b/vid.mp4 new file mode 100644 index 0000000..bcd1f78 Binary files /dev/null and b/vid.mp4 differ