문제

이 기능의 아이디어는 그림의 상단 절반 만 사라지는 것입니다 (점차 어두워지게합니다). 여기에 내가 가진 것이 있지만, 상단 절반의 단단한 검은 색을 모두 만들고있는 것 같습니다.

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

SetBlue/Red/Green 메소드의 스케일이 무엇인지 알아보십시오. 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)


출력 (그림으로 그림 Corneliu Baba - 미친 왕):


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


라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top