| 1 | package 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 | }
|
|---|