예제 #1
0
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
예제 #2
0
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()')
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
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()'
예제 #8
0
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()')
예제 #9
0
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()'