fast animation working
This commit is contained in:
60
pixelflut.py
60
pixelflut.py
@@ -8,13 +8,13 @@ import threading
|
|||||||
sizex = 800
|
sizex = 800
|
||||||
sizey = 600
|
sizey = 600
|
||||||
|
|
||||||
|
|
||||||
XSPLIT = 5
|
XSPLIT = 5
|
||||||
YSPLIT = 5
|
YSPLIT = 5
|
||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
|
|
||||||
effectivex = sizex
|
dirtybox = (0,0,sizex,sizey)
|
||||||
effectivey = sizey
|
|
||||||
|
|
||||||
old_framebuffer = Image.new("RGBA", (sizex, sizey), None)
|
old_framebuffer = Image.new("RGBA", (sizex, sizey), None)
|
||||||
framebuffer = Image.new("RGBA", (sizex, sizey), (0,0,0,0))
|
framebuffer = Image.new("RGBA", (sizex, sizey), (0,0,0,0))
|
||||||
@@ -48,8 +48,9 @@ class DrawThread(threading.Thread):
|
|||||||
global framebuffer
|
global framebuffer
|
||||||
for x in range(xfrom,xto):
|
for x in range(xfrom,xto):
|
||||||
for y in range(yfrom,yto):
|
for y in range(yfrom,yto):
|
||||||
|
if framebuffer.getpixel((x,y))[3] != 0:
|
||||||
value = b"%02X%02X%02X%02X"%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)
|
buf += b"PX %d %d %b\n"%(x,y,value)
|
||||||
|
|
||||||
s.send(buf)
|
s.send(buf)
|
||||||
while args.repeat:
|
while args.repeat:
|
||||||
@@ -65,34 +66,41 @@ def draw():
|
|||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
|
|
||||||
chunkxsize = effectivex//XSPLIT
|
dirtysizex = (dirtybox[2]-dirtybox[0])
|
||||||
chunkysize = effectivey//YSPLIT
|
dirtysizey = (dirtybox[3]-dirtybox[1])
|
||||||
|
|
||||||
remainderx = effectivex % XSPLIT
|
chunkxsize = dirtysizex//XSPLIT
|
||||||
remaindery = effectivey % YSPLIT
|
chunkysize = dirtysizey//YSPLIT
|
||||||
|
|
||||||
|
remainderx = dirtysizex % XSPLIT
|
||||||
|
remaindery = dirtysizey % YSPLIT
|
||||||
|
|
||||||
|
offsetx = dirtybox[0]
|
||||||
|
offsety = dirtybox[1]
|
||||||
|
|
||||||
xchunks = []
|
xchunks = []
|
||||||
ychunks = []
|
ychunks = []
|
||||||
remainingx = effectivex
|
|
||||||
remainingy = effectivey
|
|
||||||
|
|
||||||
while remainingx > remainderx:
|
allocatedx = 0
|
||||||
start = effectivex - remainingx
|
|
||||||
remainingx -= chunkxsize
|
remainingx = (dirtybox[2]-dirtybox[0])
|
||||||
stop = effectivex - remainingx
|
remainingy = (dirtybox[3]-dirtybox[0])
|
||||||
xchunks.append((start, stop))
|
|
||||||
|
for i in range(dirtysizex//chunkxsize):
|
||||||
|
start = offsetx + (i*chunkxsize)
|
||||||
|
stop = offsetx + ((i+1)*chunkxsize)
|
||||||
|
xchunks.append((start,stop))
|
||||||
|
|
||||||
if remainderx != 0:
|
if remainderx != 0:
|
||||||
xchunks.append((effectivex-remainingx, effectivex))
|
xchunks.append(((offsetx+dirtysizex)-remainderx, offsetx+remainderx))
|
||||||
|
|
||||||
while remainingy > remaindery:
|
for i in range(dirtysizey//chunkysize):
|
||||||
start = effectivey - remainingy
|
start = offsety + (i*chunkysize)
|
||||||
remainingy -= chunkysize
|
stop = offsety + ((i+1)*chunkysize)
|
||||||
stop = effectivey - remainingy
|
ychunks.append((start,stop))
|
||||||
ychunks.append((start, stop))
|
|
||||||
|
|
||||||
if remaindery != 0:
|
if remaindery != 0:
|
||||||
ychunks.append((effectivey-remainingy, effectivey))
|
ychunks.append(((offsety+dirtysizey)-remaindery, offsety+remaindery))
|
||||||
|
|
||||||
for xchunk in xchunks:
|
for xchunk in xchunks:
|
||||||
for ychunk in ychunks:
|
for ychunk in ychunks:
|
||||||
@@ -109,12 +117,16 @@ elif args.image:
|
|||||||
coordinates = (0,0)
|
coordinates = (0,0)
|
||||||
image = Image.open(str(args.image))
|
image = Image.open(str(args.image))
|
||||||
framebuffer.paste(image)
|
framebuffer.paste(image)
|
||||||
if not args.animate:
|
if args.animate:
|
||||||
effectivex = min(image.size[0], sizex)
|
dirtybox = (*coordinates, min(image.size[0]+coordinates[0], sizex), min(image.size[1]+coordinates[1], sizey))
|
||||||
effectivey = min(image.size[1], sizey)
|
else:
|
||||||
|
dirtybox = (0,0,min(image.size[0], sizex),min(image.size[1], sizey))
|
||||||
draw()
|
draw()
|
||||||
while args.animate:
|
while args.animate:
|
||||||
coordinates = (coordinates[0] + 5, coordinates[1] + 5)
|
coordinates = (coordinates[0] + 5, coordinates[1] + 5)
|
||||||
|
if coordinates[0] >= sizex or coordinates[1] >= sizey:
|
||||||
|
break
|
||||||
|
dirtybox = (*coordinates, min(image.size[0]+coordinates[0], sizex), min(image.size[1]+coordinates[1], sizey))
|
||||||
framebuffer = Image.new("RGBA", (sizex, sizey), (0,0,0,0))
|
framebuffer = Image.new("RGBA", (sizex, sizey), (0,0,0,0))
|
||||||
framebuffer.paste(image, coordinates)
|
framebuffer.paste(image, coordinates)
|
||||||
draw()
|
draw()
|
||||||
|
|||||||
Reference in New Issue
Block a user