[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] Gradient Algorithm



Here is some code I built for my interface system (Driftwood), specifically for filling a rectangular area with a vertical gradient. That is, it starts with one color at the top and smoothly blends to a second color at the bottom. You can use this code if you want.

Kris

Code follows, where "self.image" is a surface and "drawing_area" is a Rect showing the area to fill. "self.background_color" and "_gradient" are two color tuples, eg. (0,255,255) for cyan.

x1 = self.drawing_area[0]
x2 = x1 + self.drawing_area[2]
a, b = self.background_color, self.background_gradient
y1 = self.drawing_area[1]
y2 = y1 + self.drawing_area[3]
h = y2-y1
rate = (float((b[0]-a[0])/h),
        (float(b[1]-a[1])/h),
        (float(b[2]-a[2])/h)
        )
for line in range(y1,y2):
    color = (min(max(a[0]+(rate[0]*line),0),255),
             min(max(a[1]+(rate[1]*line),0),255),
             min(max(a[2]+(rate[2]*line),0),255)
             )
    pygame.draw.line(self.image,color,(x1,line),(x2,line))