dfi-led-matrix/client_sw/matrixSender.py

51 lines
1.3 KiB
Python

from PIL import Image, ImageDraw, ImageFont
import socket
import binascii
import io
import time
import re
import numpy as np
import PIL.ImageOps
class MatrixSender(object):
C_BLACK = 0
C_WHITE = 255
global threadrunning
threadrunning=False
def __init__(self, udphost, udpport, img_size=(160,48), bitsperpixel=1):
self._udphost = udphost
if not type(udpport) is int or udpport > 65536:
raise TypeError('port has to be int and > 65536 !!')
self._udpport = udpport
self._img_size = img_size
self.bitsperpixel=bitsperpixel
self._sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def send(self, image,invert=False):
global threadrunning
imgmap = []
sendbyte=0
senddata=bytearray()
pixelofbyte=0
for pixel in image.getdata():
r, g, b, a = pixel
pixelbrightness=int( (r+g+b)/3 *(pow(2,self.bitsperpixel)-1) /255 +0.5)
sendbyte+=pixelbrightness<<(pixelofbyte*self.bitsperpixel)
pixelofbyte+=1
if pixelofbyte>=(8/self.bitsperpixel):
pixelofbyte=0
senddata.append(sendbyte)
sendbyte=0
self._sock.sendto(bytes(senddata), (self._udphost, self._udpport))