سؤال

فكرة هذه الوظيفة هي أن تتلاشى النصف العلوي فقط من الصورة (اجعلها أغمق تدريجيا). هنا ما لدي، يبدو أنه يجعل كل من النصف العلوي الصلب الأسود.

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

اكتشف ما هو المقياس الخاص بالطرق السرية / الحمراء / الأخضر. أفترض أن 0 يتوافق مع الأسود، ولكن ما هو ألمع؟ يبدو أنك تفترض أنه 1، لكن قد يكون في الواقع 255 أو شيئا ما. حتى لو كان 1، يبدو أن هذا الرمز لا يأخذ القيمة القديمة بكسل في الاعتبار، فهو مجرد إعداده إلى اللون بالضبط، بناء على موقعه الرأسي. ربما هذا ما تريد، لكنني أشك في ذلك. ربما تريد أن تضاعف قيمة البكسل الحالية بشيء ما بدلا من ذلك.

فقط لمشاركة إصدار محسن وإضافة بعض الصور (لأن المرئيات جيدة) ...

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


مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top