这个功能的想法是淡化图片的上半部分(使其逐渐变暗)。这是我所拥有的,但似乎是所有的上半部分都是黑色的。
def fadeDownFromBlack(pic1):
w=getWidth(pic1)
h=getHeight(pic1)
for y in range(0,h/2):
for x in range(0,w):
px=getPixel(pic1,x,y)
setBlue(px,y*(2.0/h))
setRed(px,y*(2.0/h))
setGreen(px,y*(2.0/h))
答案 0 :(得分:4)
要使像素变暗,您将红色,绿色和蓝色等级乘以适当的分数。
你在做什么:
setBlue(px,y*(2.0/h))
你被告知要做什么:
setBlue(px,y*(2.0/h) * getBlue(px))
答案 1 :(得分:3)
我们在这里看一行:
setBlue(px,y*(2.0/h))
这里的关键部分是
y*(2.0/h)
当你走下去的时候,你会发生变化。让我们为y和h尝试一些简单的值。假设h为100,我们将检查y何时为0和50(h / 2)。对于y = 0,我们得到0.对于y = 50,我们得到1.如果颜色的值范围是256而0是最暗的,那么难怪这是黑色的。你所拥有的是从0到1的一系列值,但我猜你想要的是用旧的颜色值取这个数字和次数。
你想要的是:
setBlue(px,y*(2.0/h)*getBlue(px))
和其他颜色类似的东西。
答案 2 :(得分:2)
找出setBlue / Red / Green方法的比例。我假设0对应黑色,但最亮的是什么?你似乎假设它是1,但实际上可能是255或者其他东西。即使它是1,看起来这个代码没有考虑像素的旧值,它只是根据其垂直位置将其设置为精确的颜色。也许这就是你想要的,但我对此表示怀疑。您可能希望将像素的当前值乘以某个值。
答案 3 :(得分:2)
只是为了分享增强版本并添加一些视觉效果(因为视觉效果很好)......
# 'divisor' : How much we expand the gradient (less is more)
# 'switch' : If True, start gradient from bottom to top
def fadeDownFromBlack(pic, divisor, switch=False):
w = getWidth(pic)
h = getHeight(pic)
startY = 0
endY = min(h-1, int(h/float(divisor)))
inc = 1
if (switch):
startY = h-1
endY = max(0, h-1 - int(h/float(divisor)))
inc = -1
color_ratio = float(divisor)/h
for y in range(startY, endY, inc):
for x in range(0,w):
px = getPixel(pic, x, y )
setRed(px, abs(startY - y)*(color_ratio)*getRed(px))
setGreen(px, abs(startY - y)*(color_ratio)*getGreen(px))
setBlue(px, abs(startY - y)*(color_ratio)*getBlue(px))
file = pickAFile()
picture = makePicture(file)
# The following commented line answers the question
#fadeDownFromBlack(picture, 2)
fadeDownFromBlack(picture, 0.7, True)
writePictureTo(picture, "/home/mad-king.png")
show(picture)
输出(绘画由 Corneliu Baba - 疯狂的王):
............ {...................... {0}} ... .........