zoukankan      html  css  js  c++  java
  • 用Flash MX 2004自制调色版和配色组件(二)

    王咏刚,2005年4月

    在这种使用了HSB色环的调色版组件中,最重要的基本函数是HSB和RGB色彩空间的相互转换。网上好像有很多人在找类似的代码,实际上,Java API中的Color类就包含这样的函数,而Java SDK又提供了源代码,我们可以直接把Java代码改为Flash用的JavaScript代码。下面是我的修改结果:

     public static function hsb2rgb(hue:Number, saturation:Number, brightness:Number):Number {
      var r, g, b, h, f, p, q, t;
      var rgbvals = new Array(3);
      hue /= 360; saturation /= 100; brightness /= 100;
      if (saturation == 0) {
       r = g = b = Math.floor(brightness * 255.0 + 0.5);
      } else {
       h = (hue - Math.floor(hue)) * 6.0;
       f = h - Math.floor(h);
       p = brightness * (1.0 - saturation);
       q = brightness * (1.0 - saturation * f);
       t = brightness * (1.0 - (saturation * (1.0 - f)));
       switch (Math.floor(h)) {
       case 0:
        r = Math.floor(brightness * 255.0 + 0.5);
        g = Math.floor(t * 255.0 + 0.5);
        b = Math.floor(p * 255.0 + 0.5);
        break;
       case 1:
        r = Math.floor(q * 255.0 + 0.5);
        g = Math.floor(brightness * 255.0 + 0.5);
        b = Math.floor(p * 255.0 + 0.5);
        break;
       case 2:
        r = Math.floor(p * 255.0 + 0.5);
        g = Math.floor(brightness * 255.0 + 0.5);
        b = Math.floor(t * 255.0 + 0.5);
        break;
       case 3:
        r = Math.floor(p * 255.0 + 0.5);
        g = Math.floor(q * 255.0 + 0.5);
        b = Math.floor(brightness * 255.0 + 0.5);
        break;
       case 4:
        r = Math.floor(t * 255.0 + 0.5);
        g = Math.floor(p * 255.0 + 0.5);
        b = Math.floor(brightness * 255.0 + 0.5);
        break;
       case 5:
        r = Math.floor(brightness * 255.0 + 0.5);
        g = Math.floor(p * 255.0 + 0.5);
        b = Math.floor(q * 255.0 + 0.5);
        break;
       }
      }
      rgbvals[0] = r;
      rgbvals[1] = g;
      rgbvals[2] = b;
      return rgbvals; 
     }
     
     public static function hsb2rgbValue(hue:Number, saturation:Number, brightness:Number):Number {
      var rgbvals = hsb2rgb(hue, saturation, brightness);
      return (rgbvals[0] << 16) | (rgbvals[1] << 8) | (rgbvals[2] << 0);
     }
     
     public static function rgb2hsb(r:Number, g:Number, b:Number):Array {
      var hue, saturation, brightness;
      var hsbvals = new Array(3);
      var cmax = (r > g) ? r : g;
      if (b > cmax) cmax = b;
      var cmin = (r < g) ? r : g;
      if (b < cmin) cmin = b;
     
      brightness = cmax / 255.0;
      if (cmax != 0)
       saturation = (cmax - cmin) / cmax;
      else
       saturation = 0;
      if (saturation == 0)
       hue = 0;
      else {
       var redc = (cmax - r) / (cmax - cmin);
       var greenc = (cmax - g) / (cmax - cmin);
       var bluec = (cmax - b) / (cmax - cmin);
       if (r == cmax)
       hue = bluec - greenc;
       else if (g == cmax)
        hue = 2.0 + redc - bluec;
        else
       hue = 4.0 + greenc - redc;
       hue = hue / 6.0;
       if (hue < 0)
       hue = hue + 1.0;
      }
      hsbvals[0] = Math.floor(hue * 360 + 0.5);
      hsbvals[1] = Math.floor(saturation * 100 + 0.5);
      hsbvals[2] = Math.floor(brightness * 100 + 0.5);
      return hsbvals;
     }
     
     public static function rgbValue2hsb(rgb:Number):Array {
      var r = rgb >> 16;
      var g = (rgb - (r << 16)) >> 8;
      var b = rgb - (r << 16) - (g << 8);
      return rgb2hsb(r, g, b);
     }

    ……未完待续……

  • 相关阅读:
    AcWing
    The Preliminary Contest for ICPC Asia Nanjing 2019
    2004-2005 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2004)
    自考新教材-p352_1
    自考新教材-p351_4
    自考新教材-p350_3
    自考新教材-p350_2
    自考新教材-p349_3(1)
    自考新教材-p347
    自考新教材-p346
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157227.html
Copyright © 2011-2022 走看看