class Bild: def __init__(self,w,h): self.w = w self.h = h self.pixels = [[[0,0,0] for y in range(self.h)] for x in range(self.w)] # Siehe https://de.wikipedia.org/wiki/Portable_Anymap def save(self, datei): with open(datei, "w") as f: f.write("P3\n# Siehe https://de.wikipedia.org/wiki/Portable_Anymap\n") f.write("%d %d\n255\n" % (self.w, self.h)) for y in range(self.h): for x in range(self.w): w = [int(v) for v in self.pixels[x][y]] w = [v for v in w if v>=0 and v<256] if len(w)!=3: raise RuntimeError(f"Farbe bei pixel[{x}][{y}] falsch: {self.pixels[x][y]}") f.write("%d %d %d\n" % tuple(w)) # adpted from https://stackoverflow.com/questions/24852345/hsv-to-rgb-color-conversion def hsv_to_rgb(h, s, v): if s: if h == 1.0: h = 0.0 i = int(h*6.0); f = h*6.0 - i w = int(255*( v * (1.0 - s) )) q = int(255*( v * (1.0 - s * f) )) t = int(255*( v * (1.0 - s * (1.0 - f)) )) v = int(255*v) if i==0: return (v, t, w) if i==1: return (q, v, w) if i==2: return (w, v, t) if i==3: return (w, q, v) if i==4: return (t, w, v) if i==5: return (v, w, q) else: v = int(255*v); return (v, v, v)