init
This commit is contained in:
101
pixelflut.py
Executable file
101
pixelflut.py
Executable 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()
|
||||
Reference in New Issue
Block a user