2014-11-04 2 views
0

주어진 rgb 값과 주어진 색조 수를 기반으로 색조를 계산하는 함수를 만들려고합니다. 따라서 사용자는 (100,200,150)과 같은 rgb 값과 인쇄 할 색조를 제공합니다. 그러면 프로그램은 첫 번째 색상이 인쇄 된 여러 색상을 인쇄하고 주어진 색상과 그 이후의 각 색상이 흰색이 될 때까지 더 밝아 지도록 인쇄합니다 (255,255,255). 예를 들어파이썬에서 RGB 값을 곱하여 여러 색조를 얻는 비율 찾기

: 사용자 입력 : 푸른 녹색 적색 = 255, = 0, = 0, 및 numTints = 5

이 인쇄 될 : 적색, 백색, 밝은 적색 밝은 적색 밝은 적색

사용자는 원하는 색조를 얼마나 많이 입력 할 수 있습니다.

각 값이 255에 도달 할 때까지 각 rgb 값에 1보다 큰 상수를 곱해야한다는 것을 알고 있습니다. 도움이 필요한 것은 해당 값을 곱하는 상수를 찾는 방법입니다.

+0

? 당신은 당신이 가지고있는 색조의 수에 따라 등 간격으로 rgb 값을 나누어 볼 수 있습니다. 또한 빨간색 → 흰색에서 벗어나려는 경우 빨강 값을 일정하게 유지하면서 녹색 및 파랑 값을 변경해야합니다. –

+0

색상이 빨간색 일 필요는 없으며 모든 색상이 가능합니다. 나는 그늘을 가진 동일한 일을했기 때문에, 기본 색상으로 시작하여 검정색으로 가거나 RGB로 (0,0,0)로 갈뿐입니다. 이 코드는 제가 사용했던 코드입니다. (b * 비율, 0) – user2052567

+0

따라서 기본적으로 비율은 (1/최대) ** (1/색조) r = round (r * 비율, 0) g = round (g * 비율, 0) 따라서 나는 빨강, 파랑 및 녹색 값을 곱하여 비율을 계산하여 흰색을 얻는 방정식을 찾는 데 도움이 필요합니다. (255,255,255) – user2052567

답변

0

먼저 두 개의 정수를 사용하고 그 사이에 균등하게 위치한 숫자를 반환하는 함수를 만듭니다. 그런 다음 해당 기능을 자신의 빨강, 파랑 및 녹색 채널 각각에 적용하십시오.

"""returns a list of length `size` whose elements are evenly distributed between start and end""" 
def interpolate(start, end, size): 
    delta = float(end - start)/(size-1) 
    return [start + i*delta for i in range(size)] 

def interpolate_color(start, end, size): 
    red = interpolate(start[0], end[0], size) 
    green = interpolate(start[1], end[1], size) 
    blue = interpolate(start[2], end[2], size) 
    return zip(red, green, blue) 

start = (100,200,150) 
end = (255,255,255) 
for c in interpolate_color(start, end, 5): 
    print c 

결과 : 지금까지이 일을 코드

(100.0, 200.0, 150.0) 
(138.75, 213.75, 176.25) 
(177.5, 227.5, 202.5) 
(216.25, 241.25, 228.75) 
(255.0, 255.0, 255.0) 
관련 문제