java 随机生成十六进制颜色------Color.getHSBColor/getRGB方法介绍

  1. 我们直接从代码上去了解,先附上代码。
	//HSB又称HSV,表示一种颜色模式
	//在HSB模式中,H(hues)表示色相,在0~360°的标准色轮上,色相是按位置度量的。
	//	     S(saturation)表示饱和度,色彩的纯度。
	// 	     B(brightness)表示亮度。
	//HSB模式中S和B呈现的数值越高,饱和度明度越高,页面色彩强烈艳丽,对视觉刺激是迅速的,醒目的效果。
	public static String getRandomHexColor() {
		//hue变量代表的是色相,它的取值可以是任意的浮点数字。
		//然后中这个浮点数字减去该数字的基数,便可以创建0和1之间的小数部分,
		//然后再将这个数字乘以360就可以得到色彩角度。
		//在这里我们只需要取任意浮点数字即可,后面数字乘以360 则交给 getHSBColor()函数中会自动处理。
		float hue = random.nextFloat();
		// sat between 0.1 and 0.3。
		//saturation变量表示颜色的饱和度,取值为0-1之间的浮点值。
		//这里设置为0.1-0.3范围之间。
        	float saturation = (random.nextInt(2000) + 1000) / 10000f;
        	//luminance变量表示颜色的亮度,取值也是0-1之间的浮点值。
        	//这里取值为0.9。
        	float luminance = 0.9f;
        	//getHSBColor函数创建一个基于hsb颜色模型的color对象。
        	Color color = Color.getHSBColor(hue, saturation, luminance);
        	//返回十六进制颜色表达式
        	//十六进制颜色表达式通常格式是:#ffffff 即 # + 6个字母或数字
        	//下面代码具体看下面的解析。
        	return '#' + Integer.toHexString(color.getRGB() & 0xffffff) | 0x1000000).substring(1);
        }
        	
  1. 分析上面return那行代码。我们依旧先附上代码,在代码中进行讲解。
	// color.getRGB()函数最后返回的是一个负数。
	// getRGB()返回默认 sRGB ColorModel 中表示颜色的 RGB 值。
	// 在二进制表示中(24-31 位表示 alpha,16-23 位表示红色,8-15 位表示绿色,0-7 位表示蓝色)。
	// Alpha是透明度。值越大,就越不透明;范围是 0~255,即 255 是不透明,0是全透明。
	// 这里就可以解释为什么color.getRGB()函数最后返回是一个负数,因为不透明是 255 即高8位为 1111 1111 其中最高位为1符号位,即代表负数。
	// 由于我们只要红色,绿色,蓝色,即我们只需要 0-23位的值,即指需要后24位
	// 十六进制 0xffffff 的二进制表示为 1111 1111 1111 1111 1111 1111 共24位,
	// &运算,相同1则1,不同则0,因为我们只需要后24位数值,所以我们用 &运算 保留后24位数值。
	return '#' + Integer.toHexString(color.getRGB() & 0xffffff));
  1. 具体实例如下:
	@Test
	public void RandomHexColor_test() {
		float hue = random.nextFloat();
        	float saturation = (random.nextInt(2000) + 1000) / 10000f;
        	float luminance = 0.9f;
        	System.out.println("变量hue的值为:  " + hue);
        	System.out.println("变量saturation的值为: " + saturation);
        	System.out.println("变量luminance的值为: " + luminance);
        	Color color = Color.getHSBColor(hue, saturation, luminance);
       		System.out.println("对象color的值:  " + color);
        	System.out.println("color.getRGB()  " + color.getRGB());
        	System.out.println("二进制表示 color。getRGB() "+Integer.toBinaryString(color.getRGB()));
        	System.out.println();
        	System.out.println("二进制表示0xffffff   "+ Integer.toBinaryString(0xffffff) + "\n");
        	System.out.println("二进制表示color.getRGB() & 0xffffff  " + Integer.toBinaryString((color.getRGB() & 0xffffff)) + "\n");
        
        	System.out.println("十进制表示color.getRGB() & 0xffffff  " + (color.getRGB() & 0xffffff));
      
       		System.out.println("\n最后颜色结果  二进制表示  " + Integer.toBinaryString((color.getRGB() & 0xffffff)| 0x1000000));
        
        	System.out.println("   #" + Integer.toHexString((color.getRGB() & 0xffffff) | 0x1000000).substring(1));
     }
        

java 随机生成十六进制颜色------Color.getHSBColor/getRGB方法介绍_第1张图片

你可能感兴趣的:(java 随机生成十六进制颜色------Color.getHSBColor/getRGB方法介绍)