• 取色器


    取色器:

    /**
     *
     * *-----------------------------*
     * |       *** 取色器 ***         |
     * *-----------------------------*
     *
     * 编辑修改收录:fengzi(疯子、wu341、wgq341)
     *
     * 不会写代码,我是代码搬运工。
     * 联系方式:QQ(493712833)。
     *
     * 随   笔: https://www.cnblogs.com/fengziwu/
     *
     * 版权协议:请自觉遵守LGPL协议,欢迎修改、复制、转载、传播给更多需要的人。
     * 免责声明:任何因使用此软件导致的纠纷与软件/程序开发者无关。
     * 日   期: 2019.05.08
     *
     * ---------------------- 实例 --------------------------- *
     * 实例ColorPicker
     * 鼠标按下色块,返回一个16进制颜色值
       import fengzi.colors.ColorPicker;
       var s:ColorPicker=new ColorPicker();
       addChild(s);
       s.addEventListener("color.down",colorDownHandler);
       function colorDownHandler(event:Event):void
       {
       trace(event.target.colorStr)
       }
    */
    
    
    
    package fengzi.colors
    {
    	import flash.display.Sprite;
    	import flash.events.MouseEvent;
    	import flash.events.Event;
    	public class ColorPicker extends Sprite
    	{
    		static public const COLOR_DOWN:String = "color.down";
    		private var colorarr:Array = [0x000000,0x333333,0x666666,0x999999,0xcccccc,0xffffff,0xff0000,0x00ff00,0x0000ff,0xffff00,0x00ffff,0xff00ff];
    		private var rectW:int;
    		private var rectH:int;
    		//**** 每一个颜色块的边框颜色(可以修改的参数)
    		private var borderColor:uint = 0x000000;
    
    		private var colorTxt:String;
    
    		/**
    		* ColorPicker      取色器
    		* @param           rectW           色块宽
    		* @param           rectH           色块高
    		*/
    		public function ColorPicker(rectW:int=15,rectH:int=15):void
    		{
    			this.rectW = rectW;
    			this.rectH = rectH;
    			getColorSpr();
    		}
    
    		private function getColorSpr():void
    		{
    			//// 颜色的最大值,用于循环生成颜色块时候作为判断条件
    			var RMax:uint = 255;
    			var GMax:uint = 255;
    			var BMax:uint = 255;
    			var step:uint = 255 / 5;
    
    			// 用于设置六个大的颜色块的区域坐标位置
    			var areaX:int = 0;
    			var areaY:int = 0;
    
    			// 颜色选择器容器对象
    			var colorP:Sprite = new Sprite  ;
    
    			//// 循环生成每一个颜色对象
    			for (var r:uint = 0; r <= RMax; r +=  step)
    			{
    				// 生成六大颜色区域
    				var sp6:Sprite = new Sprite  ;
    				colorP.addChild(sp6);
    
    				// 用于设置每一个颜色块的坐标位置
    				var rectX:int = 0;
    				var rectY:int = 0;
    
    				for (var g:uint = 0; g <= GMax; g +=  step)
    				{
    					for (var b:uint = 0; b <= BMax; b +=  step)
    					{
    						//// 生成单独的颜色块,并设置坐标位置
    						var rectSP:Sprite = new Sprite  ;
    						makeRect(rectSP,makeColor(r,g,b),borderColor,rectW,rectH);
    						rectSP.x = rectX;
    						rectSP.y = rectY;
    						sp6.addChild(rectSP);
    
    						rectY +=  rectH;
    					}
    					rectX +=  rectW;
    					rectY = 0;
    				}
    
    				//// 设置六个颜色区域的坐标
    				sp6.x = areaX % sp6.width * 3 + 15;
    				sp6.y = areaY;
    				areaX +=  sp6.width;
    				areaY = Math.floor((areaX / sp6.height * 3)) * sp6.height;
    			}
    			for (var i:int = 0; i < colorarr.length; i++)
    			{
    				var s:Sprite = new Sprite  ;
    				makeRect(s,colorarr[i],borderColor,rectW,rectH);
    				s.y = rectH * i;
    				colorP.addChild(s);
    			}
    			addChild(colorP);
    		}
    
    		private function makeRect(spr:Sprite,color:uint,bColor:uint,recW:int,recH:int):Sprite
    		{
    			spr.graphics.lineStyle(0.1,bColor);
    			spr.graphics.beginFill(color);
    			spr.graphics.drawRect(0,0,recW,recH);
    
    			// 给每一个颜色块添加点击事件
    			spr.name = String(color);
    			addMouse(spr);
    
    			return spr;
    		}
    
    		// 生成颜色
    		private function makeColor(rr:uint,gg:uint,bb:uint):uint
    		{
    			return rr * 16 * 16 * 16 * 16 + gg * 16 * 16 + bb;
    		}
    
    		// 给每一个颜色块添加点击事件
    		private function addMouse(spr:Sprite):void
    		{
    			// 不要用CLICK事件,因为鼠标点击和移动速度过快之后,用于按下和释放时候不在同一个对象,会导致事件侦听函数没有按照想象中那么执行
    			spr.addEventListener(MouseEvent.MOUSE_DOWN,function ( eve : MouseEvent ) : void
    			 {
    			 var num : int = 6 - int( eve.currentTarget.name ).toString(16).length;
    			 var str : String = "0x";
    			 for ( var i : int = 0; i < num; i++ )
    			 {
    			 str += "0";
    			 }
    			 colorTxt= str + String( int( eve.currentTarget.name ).toString(16) ).toLocaleUpperCase();
    			 dispatchEvent(new Event(COLOR_DOWN));
    			 });
    		}
    
    
    		/***
    		* @colorStr  返回一个16进制颜色值(0xff00ff)
    		***/
    		public function get colorStr():String
    		{
    			return colorTxt;
    		}
    
    
    
    
    
    	}
    
    }
    

      

  • 相关阅读:
    20155203 《深入理解计算机系统》第五章学习总结
    2017-2018-1 20155203 20155204 实验五 通讯协议设计
    20155203 《信息安全系统设计基础》第十一周学习总结
    2017-2018-1 20155203 20155204 实验四 外设驱动程序设计
    课上第六章测试(补)
    20155203 《信息安全系统设计基础》第九周学习总结
    2017-2018-1 20155203 实验三 实时系统
    mypwd的编译和测试
    第二周 第三周 课下实践补交
    课上测试 补交及重做 深刻的教训
  • 原文地址:https://www.cnblogs.com/fengziwu/p/10908949.html
Copyright © 2020-2023  润新知