宜昌本地软件开发与弱电工程服务商
项目咨询 · 快速响应

[AS3]AS3下生成颜色色板的代码示例(as3取色矩阵)

2016-10-13 00:16:48 点击量:29 标签: 收藏本文

这是仿FLASH里的颜色样本里的取色矩阵做的.

  1. /** 
  2. 调色板样本生成程序 
  3. 东写西读  
  4. 2007.09.09 
  5. */ 
  6. //生成颜色 
  7. function makeColor(rr:uint,gg:uint,bb:uint):uint { 
  8.  return rr * 16 * 16 * 16 * 16 + gg * 16 * 16 + bb; 
  9. } 
  10. //生成小色块 
  11. function makeRect(sp:Sprite,color:uint):Sprite { 
  12.  sp.graphics.lineStyle(0.1,0xFFFFFF); 
  13.  sp.graphics.beginFill(color); 
  14.  sp.graphics.drawRect(0,0,rectW,rectH); 
  15.  return sp; 
  16. } 
  17. // 
  18. var R:uint=255; 
  19. var G:uint=255; 
  20. var B:uint=255; 
  21. var step:uint=255/5; 
  22. //色板长宽 
  23. var rectW:uint=15; 
  24. var rectH:uint=15; 
  25. //生成调色器绘制主体. 
  26. var colorBD:Sprite=new Sprite(); 
  27. this.addChild(colorBD); 
  28. colorBD.x=30; 
  29. colorBD.y=30; 
  30. colorBD.name="colorBD"; 
  31. //******************************************* 
  32. var aX:uint=0; 
  33. var aY:uint=0; 
  34. //循环生成色块 
  35. for (var r:uint=0; r<=R; r+=step) { 
  36.  //生成六大区块. 
  37.  var sp6:Sprite=new Sprite(); 
  38.  colorBD.addChild(sp6); 
  39.  //*************************************** 
  40.  var rX:uint=0; 
  41.  var rY:uint=0; 
  42.  for (var g:uint=0; g<=G; g+=step) { 
  43.   for (var b:uint=0; b<=B; b+=step) { 
  44.    //生成小色块矩阵 
  45.    var rectSP:Sprite=new Sprite(); 
  46.    sp6.addChild(rectSP); 
  47.    makeRect(rectSP,makeColor(r,g,b)); 
  48.    //设置座标. 
  49.    rY+=rectH; 
  50.    rectSP.x=rX; 
  51.    rectSP.y=rY; 
  52.   } 
  53.   rX+=rectW; 
  54.   rY=0; 
  55.  } 
  56.  sp6.x=aX%(sp6.width*3); 
  57.  sp6.y=aY; 
  58.  aX+=sp6.width; 
  59.  aY=Math.floor(aX/(sp6.height*3))*sp6.height; 
  60.  //**************************************** 
  61. } 
  62.  
  63.   
  64.  
  65.   
  66.  
  67. 转载:http://space.flash8.net/space/?690727/viewspace-365782.html 
  68.  
  69.   
  70.  
  71. 生成混色器的方法: 
  72.  
  73. 核心代码:(不可直接运行的哦) 
  74.  
  75. for (var j=0; j<200; j+=3) { 
  76.     /*1530=255*6 
  77.     依据R=255; G=0B=0 
  78.     R=255;G=255;B=0 
  79.     R=0;G=255;B=255; 
  80.     R=0;G=0;B=255; 
  81.     R=255;G=0;B=255; 
  82.     R=255;G=0;B=0 
  83.     来划分六个大色系 
  84.     */ 
  85.  
  86. for (var i=0; i<1530; i+=5) { 
  87.      if (i<255) { 
  88.       g+=5; 
  89.      } else if (i<510) { 
  90.       r-=5; 
  91.      } else if (i<765) { 
  92.       b+=5; 
  93.      } else if (i<1020) { 
  94.       g-=5; 
  95.      } else if (i<1275) { 
  96.       r+=5; 
  97.      } else { 
  98.       b-=5; 
  99.      } 
  100.      //i%6设置一个限制,也可以不设 
  101.      if (i%6==0) { 
  102.       rr=(128-r)/(100/j*2); 
  103.       gg=(128-g)/(100/j*2); 
  104.       bb=(128-b)/(100/j*2); 
  105.       //将r,b,g转化为可用的颜色值 
  106.       color=(r+rr)<<16|(g+gg)<<8|(b+bb); 
  107.  
  108.       colorSprite.graphics.beginFill(color); 
  109.       //(i/6)的值恰好是i/15的整数2倍 
  110.       colorSprite.graphics.drawRect(i/15,j/2,2,2); 
  111.       colorSprite.graphics.endFill(); 
  112.      } 
  113.     } 
  114.    } 
  115.  
  116. //根据鼠标位置提取亮度值 
  117.  
  118. private function shows(cx:Number,cy:Number) { 
  119.    var color:uint; 
  120.    var r2:Number=0; 
  121.    var g2:Number=0; 
  122.    var b2:Number=0; 
  123.    //cool值提取色彩 
  124.    var cool=b1.getPixel(cx,cy);//zi.x, zi.y 
  125.    //分别提取r,g,b值 
  126.    r=(cool>>16); 
  127.    g=(cool>>8)&0xff; 
  128.    b=cool&0xff; 
  129.    rr=(255-r)/100; 
  130.    gg=(255-g)/100; 
  131.    bb=(255-b)/100; 
  132.    rr2=r/100; 
  133.    gg2=g/100; 
  134.    bb2=b/100; 
  135.    for (var j=0; j<200; j+=1) {//200 
  136.     if (j<100) { 
  137.      color=(r+rr*(100-j))<<16|(g+gg*(100-j))<<8|(b+bb*(100-j)); 
  138.     } else { 
  139.      color=(r-r2*(j-100))<<16|(g-g2*(j-100))<<8|(b-b2*(j-100)); 
  140.     } 
  141.     cos.graphics.beginFill(color); 
  142.     cos.graphics.drawRect(m1.x+104,m1.y+j/2,35,1); 
  143.    } 
  144.    cos.graphics.endFill(); 
  145.   }