背景
我一直在尝试在 PIL 模块中创建一个棋盘,并且已经获得了前两行的一般模式,但无法弄清楚如何将其应用到整个棋盘。正如你所看到的,我创建了一个图像:
from PIL import Image
img = Image.new("RGB", (15,15), "white") # create a new 15x15 image
pixels = img.load() # create the pixel map
我对前两行的解决方案
注意 - 我仍在学习 Python,因此这段代码可能看起来效率很低,但请随意提出改进建议。
第二行:
Code:
black_2 = []
for i in range(img.size[0]):
if i % 2 == 0:
black_2.append(i)
这为我提供了放置黑色像素的所有水平索引位置。因此,对于我创建的 15x15 板,它返回[0, 2, 4, 6, 8, 10, 12, 14]
第一行:
Code:
然后,我使用第二行计算出第一行的水平索引位置
black_1 = [i-1 for i in black_2 if i > 0]
if img.size[0] % 2 == 0: # 'that' if statement
black_1.append(img.size[0]-1)
对于我创建的 15x15 像素板,它返回[1, 3, 5, 7, 9, 11, 13]
。我创建了 if 语句,因为我意识到如果板的长度均匀,则最后一个黑色像素不会显示,这似乎解决了这个问题。
将像素更改为黑色:
# hardcoded to check patterns
for i in black_1:
pixels[i,0] = (0,0,0)
for k in black_2:
pixels[k,1] = (0,0,0)
img.show()
如何将这两种图案应用到电路板的其余部分,无论其大小如何?
我会怀疑for var in range()
需要循环,但我不确定它会如何变化,具体取决于高度(img.size[1]
)的董事会是奇数或偶数。
到目前为止的总体模式:
![Chessboard](https://i.stack.imgur.com/ianpQ.png)
black_1
适用于第一行
black_2
适用于第二行