def xyzFromRGB(red, green=None, blue=None): """ RGB转成xyz """ if isinstance(red, basestring): # assume a hex string is passed if red[0] == "#": colorString = red[1:] else: colorString = red red = int(colorString[0:2], 16) green = int(colorString[2:4], 16) blue = int(colorString[4:], 16) # We need to convert the RGB value to Yxy. redScale = float(red) / 255.0 greenScale = float(green) / 255.0 blueScale = float(blue) / 255.0 colormodels.init( phosphor_red=colormodels.xyz_color(0.64843, 0.33086), phosphor_green=colormodels.xyz_color(0.4091, 0.518), phosphor_blue=colormodels.xyz_color(0.167, 0.04)) xyz = colormodels.irgb_color(red, green, blue) xyz = colormodels.xyz_from_rgb(xyz) xyz = colormodels.xyz_normalize(xyz) return xyz
def test_rgb_irgb(verbose=1): '''Test that conversions between rgb and irgb are invertible.''' for i in xrange(0, 100): ir = random.randrange(0, 256) ig = random.randrange(0, 256) ib = random.randrange(0, 256) irgb0 = colormodels.irgb_color(ir, ig, ib) rgb0 = colormodels.rgb_from_irgb(irgb0) irgb1 = colormodels.irgb_from_rgb(rgb0) rgb1 = colormodels.rgb_from_irgb(irgb1) if (irgb0[0] != irgb1[0]) or (irgb0[1] != irgb1[1]) or (irgb0[2] != irgb1[2]): msg = 'irgb0 %s and irgb1 %s do not match' % (str(irgb0), str(irgb1)) raise ValueError(msg) tolerance = 1.0e-14 err_rgb = rgb1 - rgb0 err_r = math.fabs(err_rgb[0]) err_g = math.fabs(err_rgb[1]) err_b = math.fabs(err_rgb[2]) if (err_r > tolerance) or (err_g > tolerance) or (err_b > tolerance): msg = 'rgb0 %s and rgb1 %s differ by %g' % ( str(rgb0), str(rgb1), max(err_r, err_g, err_b)) raise ValueError(msg) if verbose >= 1: print('Passed test_rgb_irgb()')
def test_irgb_string(self, verbose=False): ''' Convert back and forth from irgb and irgb_string. ''' for i in range (100): ir = random.randrange (0, 256) ig = random.randrange (0, 256) ib = random.randrange (0, 256) irgb = colormodels.irgb_color (ir, ig, ib) self.check_irgb_string(irgb, verbose)
def test_rgb_irgb(self, verbose=False): ''' Test that conversions between rgb and irgb are invertible. ''' for i in range (100): ir = random.randrange (0, 256) ig = random.randrange (0, 256) ib = random.randrange (0, 256) irgb0 = colormodels.irgb_color (ir, ig, ib) self.check_rgb_irgb(irgb0, verbose)
def test_irgb_string(self, verbose=False): ''' Convert back and forth from irgb and irgb_string. ''' for i in range(100): ir = random.randrange(0, 256) ig = random.randrange(0, 256) ib = random.randrange(0, 256) irgb = colormodels.irgb_color(ir, ig, ib) self.check_irgb_string(irgb, verbose)
def test_rgb_irgb(self, verbose=False): ''' Test that conversions between rgb and irgb are invertible. ''' for i in range(100): ir = random.randrange(0, 256) ig = random.randrange(0, 256) ib = random.randrange(0, 256) irgb0 = colormodels.irgb_color(ir, ig, ib) self.check_rgb_irgb(irgb0, verbose)
def test_irgb_string (verbose=1): '''Convert back and forth from irgb and irgb_string.''' for i in xrange (0, 100): ir = random.randrange (0, 256) ig = random.randrange (0, 256) ib = random.randrange (0, 256) irgb = colormodels.irgb_color (ir, ig, ib) irgb_string = colormodels.irgb_string_from_irgb (irgb) irgb2 = colormodels.irgb_from_irgb_string (irgb_string) irgb_string2 = colormodels.irgb_string_from_irgb (irgb2) if (irgb[0] != irgb2[0]) or (irgb[1] != irgb2[1]) or (irgb[2] != irgb2[2]): msg = 'irgb %s and irgb2 %s do not match' % (str (irgb), str (irgb2)) raise ValueError, msg if (irgb_string != irgb_string2): msg = 'irgb_string %s and irgb_string2 %s do not match' % (irgb_string, irgb_string2) raise ValueError, msg if verbose >= 1: print 'Passed test_irgb_string()'
def test_irgb_string(verbose=1): '''Convert back and forth from irgb and irgb_string.''' for i in xrange(0, 100): ir = random.randrange(0, 256) ig = random.randrange(0, 256) ib = random.randrange(0, 256) irgb = colormodels.irgb_color(ir, ig, ib) irgb_string = colormodels.irgb_string_from_irgb(irgb) irgb2 = colormodels.irgb_from_irgb_string(irgb_string) irgb_string2 = colormodels.irgb_string_from_irgb(irgb2) if (irgb[0] != irgb2[0]) or (irgb[1] != irgb2[1]) or (irgb[2] != irgb2[2]): msg = 'irgb %s and irgb2 %s do not match' % (str(irgb), str(irgb2)) raise ValueError(msg) if (irgb_string != irgb_string2): msg = 'irgb_string %s and irgb_string2 %s do not match' % ( irgb_string, irgb_string2) raise ValueError(msg) if verbose >= 1: print('Passed test_irgb_string()')
def test_rgb_irgb (verbose=1): '''Test that conversions between rgb and irgb are invertible.''' for i in xrange (0, 100): ir = random.randrange (0, 256) ig = random.randrange (0, 256) ib = random.randrange (0, 256) irgb0 = colormodels.irgb_color (ir, ig, ib) rgb0 = colormodels.rgb_from_irgb (irgb0) irgb1 = colormodels.irgb_from_rgb (rgb0) rgb1 = colormodels.rgb_from_irgb (irgb1) if (irgb0[0] != irgb1[0]) or (irgb0[1] != irgb1[1]) or (irgb0[2] != irgb1[2]): msg = 'irgb0 %s and irgb1 %s do not match' % (str (irgb0), str (irgb1)) raise ValueError, msg tolerance = 1.0e-14 err_rgb = rgb1 - rgb0 err_r = math.fabs (err_rgb [0]) err_g = math.fabs (err_rgb [1]) err_b = math.fabs (err_rgb [2]) if (err_r > tolerance) or (err_g > tolerance) or (err_b > tolerance): msg = 'rgb0 %s and rgb1 %s differ by %g' % (str (rgb0), str (rgb1), max (err_r,err_g,err_b)) raise ValueError, msg if verbose >= 1: print 'Passed test_rgb_irgb()'