Actionscript 3 Actionscript颜色选择器

Actionscript 3 Actionscript颜色选择器,actionscript-3,Actionscript 3,我正在尝试为我的应用程序创建一个Colorpicker控件。我更喜欢纯动作脚本。有人知道如何创建这样的选择器吗: 最有趣的是,我对如何绘制渐变感兴趣,因为渐变有一个饱和度,我不确定这是否太准确,但我想我可以给你一些想法: 你可以抓取你正在展示的相同的正方形图像(或者photoshop的图像),然后改变它的色调以获得整个颜色范围 如果你想画它,从数学上来说我不认为这太难。。。例如,对于青色,Y轴应控制所有通道中的最大颜色量,X轴应控制混合中红色的比例。这是我自己使用的选择器,希望它有用: pack

我正在尝试为我的应用程序创建一个Colorpicker控件。我更喜欢纯动作脚本。有人知道如何创建这样的选择器吗:
最有趣的是,我对如何绘制渐变感兴趣,因为渐变有一个饱和度,

我不确定这是否太准确,但我想我可以给你一些想法:

你可以抓取你正在展示的相同的正方形图像(或者photoshop的图像),然后改变它的色调以获得整个颜色范围


如果你想画它,从数学上来说我不认为这太难。。。例如,对于青色,Y轴应控制所有通道中的最大颜色量,X轴应控制混合中红色的比例。

这是我自己使用的选择器,希望它有用:

package lazylib.ui.generated
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.display.GradientType;
    import flash.events.MouseEvent;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import lazylib.broadcast.evts.ColorEvent;
    import lazylib.broadcast.Radio;
    /**
     * ...
     * @author www0z0k
     */
    public class Picker extends Sprite
    {
        private var bmpc: Bitmap;
        private var bmp:BitmapData;
        private var id:String;
        private var w:int;
        private var h:int;
        public static const COLOR_PICKED_EVT_TYPE: String = 'picked by picker';
        public function Picker(_id:String, _w:int = 256, _h:int = 256, _x:int = 0, _y:int = 0) 
        {
            id = _id;
            w = _w;
            h = _h;
            x = _x;
            y = _y;
            bmp = new BitmapData(w, h);
            bmpc = new Bitmap(bmp);
            addChild(bmpc);
            refillBmp(0x7f7f7f);

        }

        public function get ID():String { return id; }

        private function refillBmp(overColor:int = 0x7f7f7f, alphaStep:Number = 0.006):void {
            var rtspr:Sprite = new Sprite();
            var spr:Sprite = new Sprite();
            var colors:Array = new Array(0xff0000,0xff7f00,0xffff00,0x7fff00,0x00ff00, 0x00ff7f, 0x00ffff,0x007fff,0x0000ff, 0x7f00ff,0xff00ff, 0xff007f, 0xff0000);
            var alphas: Array = new Array(1,         1,      1,          1,         1,      1,    1,        1,         1,       1,       1,        1,        1);
            var ratios: Array = new Array(10,        30,    50,          70,        90,     110,   130,      150,       170,    190,    210,      230,       250);
            var matrix:Matrix = new Matrix();
            matrix.createGradientBox(w, h);
            spr.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix);
            spr.graphics.drawRect(0, 0, w, h);
            spr.graphics.endFill();
            rtspr.addChild(spr);
            var spr2:Sprite = new Sprite();
            rtspr.addChild(spr2);
            var startA: Number = 1;
            for (var i:int = 0; startA > 0; i++) {
                startA -= alphaStep;//orig 0.004!!!
                spr2.graphics.lineStyle(1, overColor, startA);
                spr2.graphics.moveTo(0, h - i);
                spr2.graphics.lineTo(w, h - i);
            }
            bmp.draw(rtspr, new Matrix());  
            graphics.beginFill(0, 0);
            graphics.drawRect(0, 0, w, h);
            graphics.endFill();
            buttonMode = true;
            addEventListener(MouseEvent.CLICK, onClick);
        }

        public function adjustDarkness(percent:int):void {
            var colorValue: int = int(255 * percent / 100);
            var currentGray:int = colorValue + colorValue << 8 + colorValue << 16;
            refillBmp(colorValue);

        }

        private function onClick(e:MouseEvent):void {
            var col: int = bmp.getPixel(e.localX, e.localY);
            Radio.broadcast(new ColorEvent(COLOR_PICKED_EVT_TYPE + id, col));
            dispatchEvent(new ColorEvent(COLOR_PICKED_EVT_TYPE + id, col));
        }

    }

}
包lazylib.ui.generated
{
导入flash.display.Bitmap;
导入flash.display.BitmapData;
导入flash.display.Sprite;
导入flash.display.GradientType;
导入flash.events.MouseEvent;
导入flash.geom.ColorTransform;
导入flash.geom.Matrix;
导入lazylib.broadcast.evts.ColorEvent;
导入lazylib.broadcast.Radio;
/**
* ...
*@author www0z0k
*/
公共类选择器扩展了Sprite
{
私有变量bmpc:位图;
私有变量bmp:BitmapData;
私有变量id:String;
私有变量w:int;
私有变量h:int;
public static const COLOR_PICKED_EVT_TYPE:String='PICKED by picker';
公共函数选择器(_id:String,_w:int=256,_h:int=256,_x:int=0,_y:int=0)
{
id=_id;
w=_w;
h=_h;
x=x;
y=_y;
bmp=新的位图数据(w,h);
bmpc=新位图(bmp);
addChild(bmpc);
再填充BMP(0x7F7F);
}
公共函数get ID():字符串{return ID;}
专用函数refillBmp(过色:int=0x7f7f7f,alphaStep:Number=0.006):无效{
var rtspr:Sprite=新Sprite();
var spr:Sprite=新Sprite();
变量颜色:数组=新数组(0xff0000,0xff7f00,0xffff00,0x7fff00,0x00ff00,0x00ff7f,0x00ffff,0x007fff,0x0000ff,0x7f00ff,0xff00ff,0xff007f,0xff0000);
var alphas:Array=新数组(1,1,1,1,1,1,1,1,1,1,1,1,1,1);
var比率:阵列=新阵列(10,30,50,70,90,110,130,150,170,190,210,230,250);
var矩阵:矩阵=新矩阵();
矩阵createGradientBox(w,h);
spr.graphics.beginGradientFill(渐变类型、线性、颜色、字母、比率、矩阵);
spr.graphics.drawRect(0,0,w,h);
spr.graphics.endFill();
rtspr.addChild(spr);
var spr2:Sprite=新Sprite();
rtspr.addChild(spr2);
var startA:Number=1;
对于(var i:int=0;startA>0;i++){
startA-=alphaStep;//orig 0.004!!!
spr2.图形.线条样式(1,过彩色,startA);
spr2.图形.移动到(0,h-i);
spr2.图形.线条图(w,h-i);
}
bmp.draw(rtspr,new Matrix());
图形填充(0,0);
graphics.drawRect(0,0,w,h);
graphics.endFill();
buttonMode=true;
addEventListener(MouseEvent.CLICK,onClick);
}
公共功能(百分比:整数):无效{
变量colorValue:int=int(255*百分比/100);
var currentGray:int=colorValue+colorValue