Domanda

L'idea di questa funzione è a svanire la metà superiore solo del quadro (renderlo via via più scuro). Ecco quello che ho, ma sembra essere fare tutto il nero solido metà superiore.

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))
È stato utile?

Soluzione

Diamo un'occhiata a una sola riga qui:

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

e una parte chiave qui è

y*(2.0/h)

modifiche y, come si va verso il basso. Proviamo alcuni valori semplici per ye h. Diciamo h è 100 e esamineremo quando y è sia 0 e 50 (h / 2). Per y = 0, otteniamo 0. Per y = 50, otteniamo 1. Se l'intervallo di valori per i colori è 256 dove 0 è il più oscuro, allora non c'è da meravigliarsi questo è il nero. Quello che hai è un intervallo di valori compreso tra 0 e 1., ma sto cercando di indovinare ciò che si vuole è quello di prendere quel numero e gli orari per il valore del colore vecchia.

Quello che vuoi è:

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

e cose simili per gli altri colori.

Altri suggerimenti

  

Per scurire un pixel moltiplicare i livelli di rosso, verde e blu per una frazione adeguata.

Quello che state facendo:

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

Quello che viene detto di fare:

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

Scopri che la scala è per il setBlue / rosso / verde metodi. Presumo 0 corrisponde al nero, ma qual è il più luminoso? Sembra che tu stia assumendo è 1, ma potrebbe in realtà essere 255 o qualcosa del genere. Anche se è 1, sembra che questo codice non sta prendendo vecchio valore del pixel in considerazione, è solo l'impostazione a un colore esatto, in base alla sua posizione verticale. Forse è quello che vuoi, ma ne dubito. Probabilmente si desidera moltiplicare il valore corrente del pixel da qualcosa, invece.

Proprio per condividere una versione migliorata e aggiungere alcuni effetti visivi (perché visivi sono buoni) ...

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


Uscita ( Dipinto di Corneliu Baba - Il Re Folle ):


............ entrare descrizione dell'immagine qui ..... ................. entrare descrizione dell'immagine qui ... .........


Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top