format with black
This commit is contained in:
@@ -1,27 +1,31 @@
|
||||
from PIL import Image
|
||||
|
||||
def getErr(r,g,b,stdCol):
|
||||
r-=stdCol[0]
|
||||
g-=stdCol[1]
|
||||
b-=stdCol[2]
|
||||
return r*r + g*g + b*b
|
||||
|
||||
def getNear(r,g,b, curPal):
|
||||
ind=0
|
||||
err=getErr(r,g,b,curPal[0])
|
||||
for i in range(1,len(curPal)):
|
||||
cur=getErr(r,g,b,curPal[i])
|
||||
if (cur<err):
|
||||
err=cur
|
||||
ind=i
|
||||
def getErr(r, g, b, stdCol):
|
||||
r -= stdCol[0]
|
||||
g -= stdCol[1]
|
||||
b -= stdCol[2]
|
||||
return r * r + g * g + b * b
|
||||
|
||||
|
||||
def getNear(r, g, b, curPal):
|
||||
ind = 0
|
||||
err = getErr(r, g, b, curPal[0])
|
||||
for i in range(1, len(curPal)):
|
||||
cur = getErr(r, g, b, curPal[i])
|
||||
if cur < err:
|
||||
err = cur
|
||||
ind = i
|
||||
return ind
|
||||
|
||||
def addVal(c,r,g,b,k):
|
||||
return[c[0]+(r*k)/32,c[1]+(g*k)/32,c[2]+(b*k)/32]
|
||||
|
||||
def addVal(c, r, g, b, k):
|
||||
return [c[0] + (r * k) / 32, c[1] + (g * k) / 32, c[2] + (b * k) / 32]
|
||||
|
||||
|
||||
def procImg(img, dW, dH, dX, dY, palInd, isLvl, isRed, palArr):
|
||||
if isRed and ((palInd & 1) == 0):
|
||||
raise ValueError('This white-black display')
|
||||
raise ValueError("This white-black display")
|
||||
|
||||
if not isRed:
|
||||
palInd = palInd & 0xFE
|
||||
@@ -31,7 +35,7 @@ def procImg(img, dW, dH, dX, dY, palInd, isLvl, isRed, palArr):
|
||||
sW = img.width
|
||||
sH = img.height
|
||||
|
||||
pDst = Image.new('RGB', (dW, dH))
|
||||
pDst = Image.new("RGB", (dW, dH))
|
||||
pixels = pDst.load()
|
||||
|
||||
if isLvl:
|
||||
@@ -45,7 +49,9 @@ def procImg(img, dW, dH, dX, dY, palInd, isLvl, isRed, palArr):
|
||||
color_index = getNear(r, g, b, curPal)
|
||||
pixels[i, j] = tuple(curPal[color_index])
|
||||
else:
|
||||
pixels[i, j] = tuple(curPal[(i + j) % 2]) # checkerboard for out of bounds
|
||||
pixels[i, j] = tuple(
|
||||
curPal[(i + j) % 2]
|
||||
) # checkerboard for out of bounds
|
||||
else:
|
||||
# Dithering
|
||||
errArr = [[[0, 0, 0] for _ in range(dW)] for _ in range(2)]
|
||||
@@ -54,9 +60,9 @@ def procImg(img, dW, dH, dX, dY, palInd, isLvl, isRed, palArr):
|
||||
|
||||
for j in range(dH):
|
||||
y = dY + j
|
||||
aInd, bInd = bInd, aInd # swap buffers
|
||||
aInd, bInd = bInd, aInd # swap buffers
|
||||
for i in range(dW):
|
||||
errArr[bInd][i] = [0,0,0]
|
||||
errArr[bInd][i] = [0, 0, 0]
|
||||
|
||||
for i in range(dW):
|
||||
x = dX + i
|
||||
@@ -77,20 +83,38 @@ def procImg(img, dW, dH, dX, dY, palInd, isLvl, isRed, palArr):
|
||||
|
||||
# Propagate error (Floyd-Steinberg-like)
|
||||
if i == 0:
|
||||
errArr[bInd][i] = addVal(errArr[bInd][i], r_err, g_err, b_err, 7.0)
|
||||
errArr[bInd][i] = addVal(
|
||||
errArr[bInd][i], r_err, g_err, b_err, 7.0
|
||||
)
|
||||
if dW > 1:
|
||||
errArr[bInd][i+1] = addVal(errArr[bInd][i+1], r_err, g_err, b_err, 2.0)
|
||||
errArr[aInd][i+1] = addVal(errArr[aInd][i+1], r_err, g_err, b_err, 7.0)
|
||||
errArr[bInd][i + 1] = addVal(
|
||||
errArr[bInd][i + 1], r_err, g_err, b_err, 2.0
|
||||
)
|
||||
errArr[aInd][i + 1] = addVal(
|
||||
errArr[aInd][i + 1], r_err, g_err, b_err, 7.0
|
||||
)
|
||||
elif i == dW - 1:
|
||||
errArr[bInd][i-1] = addVal(errArr[bInd][i-1], r_err, g_err, b_err, 7.0)
|
||||
errArr[bInd][i] = addVal(errArr[bInd][i], r_err, g_err, b_err, 9.0)
|
||||
errArr[bInd][i - 1] = addVal(
|
||||
errArr[bInd][i - 1], r_err, g_err, b_err, 7.0
|
||||
)
|
||||
errArr[bInd][i] = addVal(
|
||||
errArr[bInd][i], r_err, g_err, b_err, 9.0
|
||||
)
|
||||
else:
|
||||
errArr[bInd][i-1] = addVal(errArr[bInd][i-1], r_err, g_err, b_err, 3.0)
|
||||
errArr[bInd][i] = addVal(errArr[bInd][i], r_err, g_err, b_err, 5.0)
|
||||
errArr[bInd][i+1] = addVal(errArr[bInd][i+1], r_err, g_err, b_err, 1.0)
|
||||
errArr[aInd][i+1] = addVal(errArr[aInd][i+1], r_err, g_err, b_err, 7.0)
|
||||
errArr[bInd][i - 1] = addVal(
|
||||
errArr[bInd][i - 1], r_err, g_err, b_err, 3.0
|
||||
)
|
||||
errArr[bInd][i] = addVal(
|
||||
errArr[bInd][i], r_err, g_err, b_err, 5.0
|
||||
)
|
||||
errArr[bInd][i + 1] = addVal(
|
||||
errArr[bInd][i + 1], r_err, g_err, b_err, 1.0
|
||||
)
|
||||
errArr[aInd][i + 1] = addVal(
|
||||
errArr[aInd][i + 1], r_err, g_err, b_err, 7.0
|
||||
)
|
||||
|
||||
else:
|
||||
pixels[i, j] = tuple(curPal[(i + j) % 2]) # checkerboard
|
||||
pixels[i, j] = tuple(curPal[(i + j) % 2]) # checkerboard
|
||||
|
||||
return pDst
|
||||
|
Reference in New Issue
Block a user