import math
from PIL import Image
img = Image.open("/Volumes/Dean/My Code/Spectrum/Z80/Graphics/aircraft.png")
width, height = img.size
spriteName = "Sprite_Aircraft"
addMask = True
autoShift = 2
byteWidth = int(width / 8) + addMask
autoShiftLoop = int(8 / autoShift) if autoShift > 0 else 0
autoShiftByte = int(2 ** autoShift - 1) << (byteWidth * 8 - autoShift)
print("Image Width:", width)
print("Image Height:", height)
print("Byte Width::", byteWidth)
print("Add Mask: ", addMask)
print("Auto Shift: ", autoShift, autoShiftLoop)
print("Data:\n")
px = img.load()
dataArray = []
for y in range(0, height):
data = 0b0
mask = 0b0
for x in range(0, width):
r, g, b, a = px[x, y]
bit = 1 << (width - x - 1)
if a == 255: data |= bit
if a == 128: mask |= bit
if(addMask):
data = data << 8
mask = mask << 8 | 0xFF
dataArray.append([data, mask])
for j in range(0, autoShiftLoop):
label = "{:s}_{:d}:\t".format(spriteName, j * autoShift)
for row in dataArray:
print(label, end = "")
label = "\t\t\t"
prefix = "DB "
for i in reversed(range(0, byteWidth)):
s = i * 8
m = 0xFF << s
b1 = (row[1] & m) >> s # Mask
b2 = (row[0] & m) >> s # Sprite
print("{:s}%{:08b}, %{:08b}".format(prefix, b1, b2), end = "")
prefix = ", "
print("")
row[0] = row[0] >> autoShift
row[1] = row[1] >> autoShift | autoShiftByte
print("")