This commit is contained in:
Yannik Enss
2020-02-04 18:57:25 +01:00
commit d4b935c60f

101
pixelflut.py Executable file
View File

@@ -0,0 +1,101 @@
#!/usr/bin/python3
import socket
import PIL
from PIL import Image, ImageColor
import argparse
import threading
sizex = 800
sizey = 600
XSPLIT = 5
YSPLIT = 5
effectivex = sizex
effectivey = sizey
old_framebuffer = Image.new("RGBA", (sizex, sizey), None)
framebuffer = Image.new("RGBA", (sizex, sizey), (0,0,0,0))
parser = argparse.ArgumentParser()
mode = parser.add_mutually_exclusive_group(required=True)
mode.add_argument("--color")
mode.add_argument("--image")
parser.add_argument("--host", default="fsi-hase.fsmi.uni-karlsruhe.de")
parser.add_argument("--port", "-p", type=int, default="3141")
parser.add_argument("--dumb", action="store_true")
parser.add_argument("--yoffset", default=19, type=int)
parser.add_argument("--repeat", action="store_true")
args = parser.parse_args()
class DrawThread(threading.Thread):
def run(self):
xfrom = self.args["xfrom"]
yfrom = self.args["yfrom"]
xto = self.args["xto"]
yto = self.args["yto"]
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((args.host, args.port))
buf = bytearray()
global framebuffer
for x in range(xfrom,xto):
for y in range(yfrom,yto):
value = b"%02X%02X%02X%02X"%framebuffer.getpixel((x,y))
buf += b"PX %b %b %b\n"%(bytes(str(x), "ascii"),bytes(str(y+args.yoffset), "ascii"),value)
s.send(buf)
while args.repeat:
s.send(buf)
s.close()
def draw_dumb():
for x in range(sizex):
for y in range(sizey):
value = "%02X%02X%02X%02X"%framebuffer.getpixel((x,y))
wf.write("PX {} {} {}\n".format(x,y+args.yoffset,value))
while args.repeat:
for x in range(sizex):
for y in range(sizey):
value = "%02X%02X%02X%02X"%framebuffer.getpixel((x,y))
wf.write("PX {} {} {}\n".format(x,y+args.yoffset,value))
def draw():
buf = bytearray()
global framebuffer, old_framebuffer
if framebuffer == old_framebuffer:
# nothing to draw
return
for x in range(effectivex):
for y in range(effectivey):
# if framebuffer.getpixel((x,y))[3] != 0 and framebuffer.getpixel((x,y)) != old_framebuffer.getpixel((x,y)):
value = b"%02X%02X%02X%02X"%framebuffer.getpixel((x,y))
buf += b"PX %b %b %b\n"%(bytes(str(x), "ascii"),bytes(str(y+args.yoffset), "ascii"),value)
s.send(buf)
while args.repeat:
s.send(buf)
old_framebuffer = framebuffer
if args.color:
framebuffer.paste(ImageColor.getrgb(args.color), (0,0,sizex,sizey))
if args.dumb:
draw_dumb()
else:
draw()
elif args.image:
image = Image.open(str(args.image))
framebuffer.paste(image)
effectivex = min(image.size[0], sizex)
effectivey = min(image.size[1], sizey)
if args.dumb:
draw_dumb()
else:
draw()
wf.close()
s.close()