Идея этой функции состоит в том, чтобы исчезнуть верхняя половина только изображения (делайте его постепенно более темным). Вот то, что я имею, но это, кажется, делает всю верхнюю половину чистой черной.
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 меняется, когда вы спускаетесь вниз. Давайте попробуем несколько простых значений для 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/Red/Green. Я предполагаю, что 0 соответствует черному цвету, но какой самый яркий? Похоже, вы предполагаете, что это 1, но на самом деле это может быть 255 или что-то в этом роде. Даже если это 1, похоже, что этот код не принимает во внимание старое значение пикселя, а просто устанавливает ему точный цвет, основываясь на его вертикальном положении. Возможно, это то, что вам нужно, но я сомневаюсь. Скорее всего, вы хотите умножить текущее значение пикселя на что-то другое.