Question

L'idée de cette fonction est de disparaître la moitié supérieure seulement de l'image (rendre progressivement plus sombre). Voici ce que j'ai, mais il semble être faire toute la moitié supérieure noir.

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))
Était-ce utile?

La solution

Regardons juste une ligne ici:

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

et une partie clé ici est

y*(2.0/h)

changements y, comme vous allez vers le bas. Essayons quelques valeurs simples pour y et h. Disons que h est de 100 et nous examinerons quand y est à la fois 0 et 50 (h / 2). Pour y = 0, on obtient 0. Pour y = 50, nous obtenons 1. Si votre gamme de valeurs pour les couleurs est de 256 0 étant le plus sombre, alors pas étonnant que ce soit noir. Ce que vous avez est une plage de valeurs de 0 à 1., mais je devine ce que vous voulez est de prendre ce nombre et par fois elle l'ancienne valeur de couleur.

Qu'est-ce que vous voulez est:

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

et les choses semblables pour les autres couleurs.

Autres conseils

  

Pour assombrir un pixel vous multiplier les niveaux de rouge, vert et bleu par une fraction appropriée.

Qu'est-ce que vous faites:

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

Qu'est-ce que vous dit de le faire:

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

Découvrez ce que l'échelle est le setBlue / Rouge / Vert méthodes. Je suppose que 0 correspond au noir, mais ce qui est le plus brillant? Vous semblez en supposant qu'il est 1, mais il pourrait en fait être 255 ou quelque chose. Même si elle est 1, il semble que ce code ne prend pas la mise ancienne valeur en compte du pixel, il est juste à une couleur exacte, en fonction de sa position verticale. Peut-être que ce que vous voulez, mais je doute. Vous voulez sans doute multiplier la valeur actuelle du pixel par quelque chose à la place.

Juste pour partager une version améliorée et ajouter quelques visuels (parce visuels sont bons) ...

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


Sortie ( Peinture par Corneliu Baba - Le Roi Dément ):


............ entrer la description d'image ici ..... ................. entrer image description ici ... .........


Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top