photoshop中的取色起主要分为两个部分,一个是主取色板,还有个是色相板。先来看下主取色板,不管它是什么颜色,都有个规律:就是从上到下从白到黑,从左到右颜色从白到它的色相值的相关值(色相值就是一个颜色在饱和度和明暗度都为100%的时候的RGB值),这里要实现一种颜色就是由它的色相值和它的明暗度和饱和度来决定的。再分析下色相板,长256像素,颜色从R-G-B-R,可以看作一个圆环分成3段吧。
主取色板的制作,经过上面的简单分析,做个主取色板应该不难,做两个256*256的Shap,用Shap.Graphics 的beginGradientFill的函数,分别填充两个从白到黑(A),从白到色象值(B)的两个渐变,然后将A旋转90度,将B的混合模式设置为Muti,这样就得到了在某一色象值下的主取色板图。

{
return rgbarr[0]*Math.pow(256,2)+rgbarr[1]*Math.pow(256,1)+rgbarr[2]
}
public static function computeXTC(c:uint,x:Number,y:Number):uint
{
var rgbArr:Array = new Array();
rgbArr = uintTorgb(c);
//trace(rgbTouint(rgbArr).toString(16))
if(rgbArr[0] == 255)//red system
{
//trace(rgbArr[1])
rgbArr[0] = -y+255; //R
rgbArr[1] = Math.round(-(((rgbArr[1]-255)/Math.pow(255,2)*x)+1)*y+(rgbArr[1]-255)/255*x+255);//G
rgbArr[2] = Math.round(-(((rgbArr[2]-255)/Math.pow(255,2)*x)+1)*y+(rgbArr[2]-255)/255*x+255);
trace("X="+x+"Y="+y+" "+
rgbArr[0].toString(16)+" "+
rgbArr[1].toString(16)+" "+
rgbArr[2].toString(16)+" "+
" AAAAAAAAAA")
}
if(rgbArr[1] == 255)//green system
{
rgbArr[1] = -y+255;
rgbArr[0] = Math.round(-(((rgbArr[0]-255)/Math.pow(255,2)*x)+1)*y+(rgbArr[0]-255)/255*x+255);//G
rgbArr[2] = Math.round(-(((rgbArr[2]-255)/Math.pow(255,2)*x)+1)*y+(rgbArr[2]-255)/255*x+255);
//trace(rgbTouint(rgbArr).toString(16)+" BBBBBBBBBBBB")
return rgbTouint(rgbArr);
}
if(rgbArr[2] == 255)// blue system
{
rgbArr[2] = -y+255;
rgbArr[0] = Math.round(-(((rgbArr[0]-255)/Math.pow(255,2)*x)+1)*y+(rgbArr[0]-255)/255*x+255);//G
rgbArr[1] = Math.round(-(((rgbArr[1]-255)/Math.pow(255,2)*x)+1)*y+(rgbArr[1]-255)/255*x+255);
//trace(rgbTouint(rgbArr).toString(16)+" CCCCCCCCCC")
return rgbTouint(rgbArr);
}
return rgbTouint(rgbArr);