#!/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._kwargs["xfrom"] yfrom = self._kwargs["yfrom"] xto = self._kwargs["xto"] yto = self._kwargs["yto"] print(xfrom, xto, yfrom, 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(): chunkxsize = effectivex//XSPLIT chunkysize = effectivey//YSPLIT remainderx = effectivex % XSPLIT remaindery = effectivey % YSPLIT xchunks = [] ychunks = [] remainingx = effectivex remainingy = effectivey while remainingx > remainderx: start = effectivex - remainingx remainingx -= chunkxsize stop = effectivex - remainingx xchunks.append((start, stop)) xchunks.append((remainingx-effectivex, effectivex)) while remainingy > remaindery: start = effectivey - remainingy remainingy -= chunkysize stop = effectivey - remainingy ychunks.append((start, stop)) ychunks.append((remainingy-effectivey, effectivey)) for xchunk in xchunks: for ychunk in ychunks: DrawThread(kwargs={"xfrom":xchunk[0], "xto":xchunk[1], "yfrom":ychunk[0], "yto":ychunk[1]}).start() if args.color: framebuffer.paste(ImageColor.getrgb(args.color), (0,0,sizex,sizey)) 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) draw()