#! /usr/bin/env python #------------------------------------------------------------------------------ # Visualizzatore colori HSV # colorHSV.py - by C.Fin - Python2&3 #------------------------------------------------------------------------------ try: import tkinter # Python 3.x except ImportError: import Tkinter as tkinter # Python 2.x #------------------------------------------------------------------------------ class GUI: def __init__(self): self.form = tkinter.Tk() self.form.resizable(False, False) self.canvas = tkinter.Canvas( self.form, highlightthickness=0, width=480, height=300) self.canvas.pack(side="left", fill="both", expand=1, padx=4, pady=4) self.frame1 = tkinter.Frame() self.frame1.pack(side="left", fill="both", expand=1) self.scaleH = tkinter.Scale(self.frame1, to=0, from_=360, showvalue=0) self.scaleH.pack(side="left", fill="y", expand=1, pady=4, padx=4) self.scaleS = tkinter.Scale( self.frame1, to=0.0, from_=1.0, showvalue=0, resolution=0.005) self.scaleS.pack(side="left", fill="y", expand=1, pady=4) self.scaleV = tkinter.Scale( self.frame1, to=0.0, from_=1.0, showvalue=0, resolution=0.005) self.scaleV.pack(side="left", fill="y", expand=1, pady=4, padx=4) #------------------------------------------------------------------------------ # IN: H 0-360 S 0.0-1.0 V 0.0-1.0 # OUT: R 0.0-1.0 G 0.0-1.0 B 0.0-1.0 #------------------------------------------------------------------------------ def hsv_to_rgb(h, s, v): if h == 360: h = 0 i = int(h / 60) # settore 0..5 f = (h % 60) / 60.0 # offset 0.0..1.0 nel settore pv = v * ( 1 - s ) qv = v * ( 1 - s*f ) tv = v * ( 1 - s * (1 - f) ) return { 0: (v, tv, pv), 1: (qv, v, pv), 2: (pv, v, tv), 3: (pv, qv, v), 4: (tv, pv, v), 5: (v, pv, qv) }[i] #------------------------------------------------------------------------------ class ColorHSV: def __init__(self): self.gui = GUI() self.gui.scaleH.configure(command=self.disegna) self.gui.scaleS.configure(command=self.disegna) self.gui.scaleV.configure(command=self.disegna) def disegna(self, _=None): h = self.gui.scaleH.get() s = self.gui.scaleS.get() v = self.gui.scaleV.get() r, g, b = [ int(x * 255) for x in hsv_to_rgb(h, s, v) ] self.gui.canvas.configure(bg="#%02x%02x%02x" % (r, g, b)) self.gui.form.title( "HSV: %3d %1.2f %1.2f RGB: %3d %3d %3d - %02X%02X%02X" % (h, s, v, r, g ,b, r, g, b) ) def start(self): self.gui.form.mainloop() #------------------------------------------------------------------------------ app = ColorHSV() app.start()