在python中绘制彩色的跳棋网格

时间:2016-06-15 08:30:25

标签: python image colors grid

我需要在现有图像中绘制彩色检查器网格,并从列表中获取颜色。 这是我的代码:

import image as im
def draw_gen_checkers(img, s, colors):
    n = 0
    for i in range(len(img)/s):
        for j in range(len(img[0])/s):
            for ii in range(i*s, i*s+s):
                for jj in range(j*s,j*s+s):
                    img[ii][jj] = colors[n]
            if n == len(colors)-1:
                n = 0
            else:
                n = n + 1
    im.visd(img)

img = im.create(300, 200, (0,0,0))
colors = [(255,128,0),(0,0,255),(0,255,0),(255,0,0)]
s = 25

使用此代码,这是我得到的结果:Image1

当图片看起来像这样:Image

所有提前!

2 个答案:

答案 0 :(得分:0)

很高兴看到你的工作进展:)

让我们进行数学运算:你的照片长300px,你的情况是25px长,所以你每行有12个案例,因为你有4种颜色你有12 // 4 == 3颜色轮换线,但是因为12%3 == 0,当你开始你的新行时,你的n又回到0.而且你说你想要在每一行中增加颜色的偏移量,所以你的所有行都是相同的。

只需在每行的开头添加一个n增量即可。

对于你的n增量,而不是使用if-else的人经常使用模运算符n = (n+1) % len(colors) # 0, 1, 2, 3, 0, 1, ...

编辑:当我说'在每行的开头添加一个n增量'我在考虑这样的事情(我认为它应该是好的):

def draw_gen_checkers(img, s, colors):
    n = 0 # Alternatively n = len(colors)
    for i in range(len(img)/s):
        n = (n + 1) % len(colors)
        for j in range(len(img[0])/s):
            for ii in range(i*s, i*s+s):
                for jj in range(j*s,j*s+s):
                    img[ii][jj] = colors[n]
            n = (n + 1) % len(colors)

缺点是您使用的第一种颜色将是列表中的第二种颜色,因为它会在其他所有颜色之前增加n。取决于你做了什么它可能是一个问题,如果它是你可以初始化n到len(颜色)-1来修复它。

我还会创建一个函数draw_square(i,j,s,c),带有2个最内部循环,这将使代码更具可读性和模块性(这个函数在某些时候可能在其他地方有用)

答案 1 :(得分:0)

Toppings

打印:img