root/lang/actionscript/colorpicker/kugyu/ColorCircle.as @ 7708

Revision 7708, 3.3 kB (checked in by gyuque, 5 years ago)

colorpicker: BrightnessBar?

Line 
1package kugyu
2{
3        import flash.display.*;
4        import flash.geom.*;
5        public class ColorCircle extends Sprite
6        {
7                public static const radToDeg:Number = 180.0/Math.PI;
8               
9                private var mImg:Bitmap;
10                private var mImgData:BitmapData;
11                private var mCursor:Sprite;
12               
13                private var mH:Number;
14                private var mS:Number;
15                private var mV:Number;
16                private var mCenter:int;
17               
18                private var mColorTrans:ColorTransform = new ColorTransform();
19
20                function ColorCircle(R:int)
21                {
22                        mCenter = R;
23                        mV = 1;
24                       
25                        addChild(
26                                generateColors(graphics, R*2)
27                        );
28                       
29                        addChild(mCursor = createBorder(R));
30                        addChild(mCursor = createCursor());
31                       
32                        setHSV(0, 0, 1);
33                }
34               
35                private function createBorder(R:int):Sprite
36                {
37                        var s:Sprite = new Sprite();
38                        var g:Graphics = s.graphics;
39                       
40                        g.lineStyle(3, 0xffffff, 1, true);
41                        g.drawCircle(R, R, R);
42                        g.endFill();
43                       
44                        return s;
45                }
46               
47                public function setCenterPos(ax:int, ay:int):void
48                {
49                        x = ax - mCenter;
50                        y = ay - mCenter;
51                }
52               
53                private function createCursor():Sprite
54                {
55                        var s:Sprite = new Sprite();
56                        var g:Graphics = s.graphics;
57
58                        g.lineStyle(3, 0xffffff, 1, true);
59                        g.drawCircle(0, 0, 5);
60
61                        g.lineStyle(1, 0x000000, 1, true);
62                        g.drawCircle(0, 0, 5);
63                       
64                        return s;
65                }
66               
67                public function setHSV(H:Number, S:Number, V:Number):void
68                {
69                        if (S<0) S=0;
70                        if (S>1) S=1;
71                       
72                        mH = H;
73                        mS = S;
74                        mV = V;
75                       
76                        updateCursor();
77                }
78               
79                public function updateCursor():void
80                {
81                        var x:Number = int(Math.cos(mH) * mS * Number(mCenter));
82                        var y:Number = int(Math.sin(mH) * mS * Number(mCenter));
83                       
84                        mCursor.x = x + mCenter;
85                        mCursor.y = y + mCenter;
86                       
87                       
88                        mColorTrans.redMultiplier = mV;
89                        mColorTrans.greenMultiplier = mV;
90                        mColorTrans.blueMultiplier = mV;
91                        mImg.transform.colorTransform = mColorTrans;
92                }
93               
94                public function setByMousePos():void
95                {
96                        var x:Number = mouseX - mCenter;
97                        var y:Number = mouseY - mCenter;
98                       
99                        var S:Number = Math.sqrt(x*x + y*y) / Number(mCenter);
100                        var H:Number = Math.atan2(y, x);
101                        setHSV(H, S, mV);
102                }
103               
104                public function get rgb():uint
105                {
106                        return ColorConv.HSVtoRGB(mH*radToDeg, mS, mV);
107                }
108
109                public function get base_rgb():uint
110                {
111                        return ColorConv.HSVtoRGB(mH*radToDeg, mS, 1);
112                }
113               
114                public function get H():Number
115                {
116                        return mH;
117                }
118
119                public function get S():Number
120                {
121                        return mS;
122                }
123
124                public function set V(v:Number):void
125                {
126                        if (v != mV)
127                        {
128                                mV = v;
129                                updateCursor();
130                        }
131                }
132               
133                private function generateColors(g:Graphics, size:int):Bitmap
134                {
135                        mImgData = new BitmapData(size, size, true, 0);
136                        mImg = new Bitmap(mImgData);
137                       
138                        var x:int;
139                        var y:int;
140                        var center:int = mCenter;
141                       
142                        for (y = 0;y < size;y++)
143                        {
144                                for (x = 0;x < size;x++)
145                                {
146                                        var dx:Number = Number(x-center);
147                                        var dy:Number = Number(y-center);
148                                       
149                                        var S:Number = Math.sqrt(dx*dx + dy*dy) / Number(center);
150                                        var H:Number = Math.atan2(dy, dx);
151                                       
152                                        var alpha:Number = 80.0 - S*80.0;
153                                        if (alpha<0) continue;
154                                        if (alpha>1) alpha = 1;
155                                       
156                                       
157                                        mImgData.setPixel32(x, y, (uint(alpha*255)<<24)|ColorConv.HSVtoRGB(H*radToDeg, S, mV));
158                                }
159                        }
160                       
161                       
162                       
163                        return mImg;
164                }
165        }
166}
Note: See TracBrowser for help on using the browser.