2010-02-10 10 views
6

इस फ़ंक्शन का विचार केवल चित्र के शीर्ष आधे भाग को कम करना है (इसे धीरे-धीरे गहरा बनाएं)। मेरे पास यही है लेकिन ऐसा लगता है कि यह शीर्ष आधा ठोस काला बना रहा है।धीरे-धीरे एक तस्वीर को फेंकना

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

मुझे लगता है कि आप पीआईएल का उपयोग कर रहे हैं? (बस जांच रहा है।) – MatrixFrog

+0

मुझे विश्वास नहीं है, नहीं। जब तक यह ज्योथन 4.3 के साथ आता है। – roger34

+0

पेपर से: एक पिक्सेल को अंधेरे करने के लिए आप एक उचित अंश से लाल, हरे और नीले स्तर को गुणा करें। विशेष रूप से, यदि y तस्वीर के शीर्ष भाग में है, तो पंक्ति वाई में सभी पिक्सल में उनके आरजीबी स्तर y * (2.0/h) से गुणा हो जाते हैं, जहां एच तस्वीर की ऊंचाई है। तस्वीर के निचले हिस्से में पिक्सेल बदल नहीं गए हैं। मुझे लगता है कि मुझे setBlue आदि का उपयोग करने की आवश्यकता नहीं है? क्या मैं वापसी का उपयोग करूंगा? – roger34

उत्तर

3

की सिर्फ एक लाइन यहाँ पर नजर डालते हैं:

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

और महत्वपूर्ण हिस्सा यहाँ

y*(2.0/h) 

है y परिवर्तन, जैसा कि आप नीचे जाना। आइए वाई और एच के लिए कुछ सरल मान आज़माएं। मान लें कि एच 100 है और हम जांच करेंगे कि वाई 0 और 50 (एच/2) दोनों है। Y = 0 के लिए, हम 0 प्राप्त करते हैं। Y = 50 के लिए, हमें 1 मिलता है। यदि रंगों के लिए आपकी मानों की श्रेणी 256 है, तो 0 सबसे अंधेरा है, तो कोई आश्चर्य नहीं कि यह काला है। आपके पास 0 से 1 के मानों की एक श्रृंखला है, लेकिन मैं अनुमान लगा रहा हूं कि आप उस नंबर को लेना चाहते हैं और इसे पुराने रंग मान से गुणा करना है।

क्या आप चाहते हैं: अन्य रंगों के लिए

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

और इसी तरह की बातें।

+0

आपको बहुत बहुत धन्यवाद! तुम कमाल हो। – roger34

+0

मन इसे स्वीकार किए गए उत्तर के रूप में चिह्नित करता है, फिर? प्रश्न के किनारे चेकमार्क पर क्लिक करें। – badp

+0

हाहा ठीक है धन्यवाद, मैं सोच रहा था कि मेरे लिए ऐसा करने का कोई तरीका था या यदि यह उपरोक्त द्वारा निर्धारित किया गया था। – roger34

2

पता लगाएं कि सेटब्लू/रेड/ग्रीन विधियों के लिए स्केल क्या है। मुझे लगता है कि 0 काले रंग के अनुरूप है, लेकिन सबसे तेज क्या है? ऐसा लगता है कि यह 1 है, लेकिन यह वास्तव में 255 या कुछ हो सकता है। भले ही यह 1 है, ऐसा लगता है कि यह कोड पिक्सेल के पुराने मान को ध्यान में नहीं ले रहा है, यह सिर्फ इसकी लंबवत स्थिति के आधार पर इसे सटीक रंग में सेट कर रहा है। हो सकता है कि आप यही चाहते हैं, लेकिन मुझे शक है। आप शायद पिक्सेल के वर्तमान मूल्य को इसके बजाय किसी चीज़ से गुणा करना चाहते हैं।

+1

पैमाने वास्तव में 0-255 है। – badp

+0

पेपर से: एक पिक्सेल को अंधेरे करने के लिए आप एक उचित अंश से लाल, हरे और नीले स्तर को गुणा करें। विशेष रूप से, यदि y तस्वीर के शीर्ष भाग में है, तो पंक्ति वाई में सभी पिक्सल में उनके आरजीबी स्तर y * (2.0/h) से गुणा हो जाते हैं, जहां एच तस्वीर की ऊंचाई है। तस्वीर के निचले हिस्से में पिक्सेल बदल नहीं गए हैं। मुझे लगता है कि मुझे setBlue आदि का उपयोग करने की आवश्यकता नहीं है? क्या मैं वापसी का उपयोग करूंगा? – roger34

4

एक उपयुक्त अंश द्वारा एक पिक्सेल आप गुणा लाल, हरे और नीले रंग के स्तर को काला कर लिए।

तुम क्या कर रहे:

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

बस एक उन्नत संस्करण का हिस्सा है और कुछ दृश्यों को जोड़ने (क्योंकि दृश्यों अच्छा कर रहे हैं) के लिए:

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

आपको बस इतना करना बताया जा रहा है क्या। ..

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


आउटपुट (चित्रकारी कॉर्नेलियू बाबा द्वारा - पागल राजा):


............ enter image description here ............. ......... enter image description here ............


संबंधित मुद्दे