Frage

Die Idee dieser Funktion ist die obere Hälfte nur von dem Bild zu verblassen (es macht allmählich dunkler). Hier ist, was ich habe, aber es scheint die gesamte obere Hälfte solid schwarz zu machen.

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))
War es hilfreich?

Lösung

Schauen wir uns nur eine Zeile hier:

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

und Schlüsselteil ist hier

y*(2.0/h)

y Änderungen, wie Sie nach unten gehen. Lassen Sie uns versuchen, einige einfache Werte für y und h. Lassen Sie uns sagen h ist 100 und wir werden prüfen, wenn y beide 0 und 50 (h / 2). Für y = 0, erhalten wir 0 für y = 50, erhalten wir 1. Wenn Ihr Wertebereich für die Farben 256 ist mit 0 den dunkelsten ist, dann fragen sich nicht diese schwarz ist. Was Sie haben, ist ein Wertebereich von 0 bis 1, aber ich glaube, was Sie wollen, diese Zahl zu nehmen und mal durch den alten Farbwert.

Was Sie wollen, ist:

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

und ähnliche Dinge für die anderen Farben.

Andere Tipps

  

ein Pixel verdunkeln Sie multiplizieren die roten, grünen und blauen Ebenen durch eine entsprechende Fraktion.

Was Sie tun:

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

Was Sie gesagt wird, zu tun:

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

Finden Sie heraus, was die Skala für die setBlue / Rot / Grün-Methoden ist. Ich gehe davon aus 0 entspricht schwarz, aber was ist der hellste? Sie scheinen es 1 zu werden unter der Annahme, aber es könnte tatsächlich 255 oder so etwas. Auch wenn es 1 ist, sieht es aus wie dieser Code nicht den Pixels alten Wert zu berücksichtigen, es ist nur es auf eine exakte Farbeinstellung, basierend auf seiner vertikalen Position. Vielleicht ist das, was Sie wollen, aber ich bezweifle es. Sie wollen wahrscheinlich anstelle des Pixels aktuellen Wert von etwas multiplizieren.

Nur eine erweiterte Version zu teilen und einige visuelle Elemente (weil Visuals gut) ...

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


Ausgang ( Malerei von Corneliu Baba - der wütende König ):


............ image description treten Sie hier ..... ................. image description treten Sie hier ... .........


Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top