as3.0 小代码(1)------ 颜色渐变中的颜色渐变数组产生算法

//分离:如0xefebec  变成[0xec,0xeb,oxef]
function colorValTransfer(inNum:uint):Array{
	if(inNum>0xffffff){
		throw new Error("Function:colorValTransfer parameter:inNum>>>parameter's value must be smaller than 0xffffff");
	}
	var outArr = [];
	outArr[0] = inNum % 0x100;
	var middleVal:uint = Math.floor(inNum / 0x100);
	outArr[1] = middleVal% 0x100;
	outArr[2] = Math.floor(middleVal/0x100);
	return outArr;
}

//找出与0xff的最大差值 如 max(0xff - 0xec,0xff-0xeb,0xff-0xef)
function transferBaseNum(tranferArr:Array):uint{
	var basicNum : uint = 0;
	var ergodicFun = function (element:*, index:int, arr:Array): void {
		var res:int = 0xff - element;
		if(res < 0 || element < 0){
			throw new Error('Function:transferBaseNum parameter:tranferArr>>>The elements in an Array must be smaller than 0xff and biger than 0x00');
		}
		if(res > basicNum){
			basicNum = res;
		}
	}
	tranferArr.forEach(ergodicFun);
	return basicNum;
}


//生成颜色渐变数组
function getGradientColorArr(colorInNum:uint):Array{
	var outArr:Array = colorValTransfer(colorInNum);
	var basicNum:uint = transferBaseNum(outArr);
	var resArr:Array = [];
	resArr[0] = outArr[0] + outArr[1] * 0x100 + outArr[2] * 0x10000;
	var midleF,midleM,midleE:uint = 0;
	for(var i:int = 1 ; i <=  basicNum ; i++){
		outArr[0] += 1;
		outArr[1] += 1;
		outArr[2] += 1;
		if(outArr[0] >0xff){
			midleF = 0xff;
		}else{
			midleF = outArr[0];
		}
		
		if(outArr[1] > 0xff ){
			midleM = 0xff;
		}else{
			midleM = outArr[1];
		}
		
		if(outArr[2] > 0xff){
			midleE = 0xff;
		}else{
			midleE = outArr[2];
		}
		resArr[i] = midleF + midleM * 0x100 + midleE * 0x10000;
	}
	return resArr;
}



var log:Function = function(element:*, index:int, arr:Array):void{
	trace(element.toString(16));
}

getGradientColorArr(0x333333).forEach(log);


你可能感兴趣的:(AS,actionscript,as3.0,颜色渐变)