此功能的构思是褪色的上半部分只图片的(使之逐渐变暗)。这里是我有什么,但它似乎是使所有的上半部分纯黑色的。

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))
有帮助吗?

解决方案

让我们来看看刚一行在这里:

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))

和其它颜色类似的事情。

其他提示

  

要变暗您像素乘红色,绿色和蓝色的水平通过适当的级分。

你在做什么:

setBlue(px,y*(2.0/h))

你所被告知的事情:

setBlue(px,y*(2.0/h) * getBlue(px))

找出规模是做什么用的setBlue /红色/绿色的方法。我假设0对应于黑色,但什么是最聪明的?你似乎是假设它是1,但它实际上可能是255或东西。即使是1,它看起来像这样的代码不是借像素的旧值考虑在内,它只是将其设置为一个确切的颜色,是根据它的垂直位置。也许这就是你想要的,但我对此表示怀疑。你可能想要的东西,而不是乘以像素的当前值。

只是共享的增强版本,增加一些视觉效果(因为视觉效果都不错)...

# '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)

,点击 输出(由绘画的科尼利·巴巴 - 疯狂特大):


............ “在这里输入的图像描述” ..... ................. “在这里输入的图像描述” ... .........


许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top