public
Description: Small script for showing histogram (AS3)
Clone URL: git://github.com/cho45/histogram-as.git
Search Repo:
カラーごとにだすようにした
cho45 (author)
Sat Apr 19 19:40:58 -0700 2008
commit  c3047d4e7799472438900deddc063782636e95e2
tree    24e9dbf79c3dc39b6b1791dd2846708ea79e4eb0
parent  9778d6106027958605502856953dadcf7335686f
...
1
2
3
 
4
5
6
...
8
9
10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
12
13
14
15
 
16
17
18
19
20
21
22
 
 
 
 
23
 
 
 
 
24
25
26
27
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
29
30
31
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
34
35
36
37
38
39
40
41
42
43
44
45
 
46
47
48
...
55
56
57
58
 
59
60
61
 
 
62
63
64
...
1
2
3
4
5
6
7
...
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
37
38
39
40
 
 
 
 
41
42
43
44
45
46
47
48
49
50
 
 
 
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
 
 
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
 
 
 
 
 
 
 
 
 
109
110
111
112
...
119
120
121
 
122
123
 
 
124
125
126
127
128
0
@@ -1,6 +1,7 @@
0
 package {
0
   import flash.display.*;
0
   import flash.events.*;
0
+ import flash.system.LoaderContext;
0
   import flash.net.URLRequest;
0
   import flash.geom.Point;
0
   import flash.filters.ColorMatrixFilter;
0
@@ -8,41 +9,104 @@ package {
0
   [SWF(frameRate=24, background=0x000000)]
0
   public class Histogram extends Sprite {
0
 
0
+ private var redFilter:ColorMatrixFilter = new ColorMatrixFilter([
0
+ 1, 0, 0, 0, 0,
0
+ 1, 0, 0, 0, 0,
0
+ 1, 0, 0, 0, 0,
0
+ 0, 0, 0, 1, 0
0
+ ]);
0
+
0
+ private var greenFilter:ColorMatrixFilter = new ColorMatrixFilter([
0
+ 0, 1, 0, 0, 0,
0
+ 0, 1, 0, 0, 0,
0
+ 0, 1, 0, 0, 0,
0
+ 0, 0, 0, 1, 0
0
+ ]);
0
+
0
+ private var blueFilter:ColorMatrixFilter = new ColorMatrixFilter([
0
+ 0, 0, 1, 0, 0,
0
+ 0, 0, 1, 0, 0,
0
+ 0, 0, 1, 0, 0,
0
+ 0, 0, 0, 1, 0
0
+ ]);
0
+
0
     public function Histogram () {
0
       stage.align = StageAlign.TOP_LEFT;
0
       stage.scaleMode = StageScaleMode.NO_SCALE;
0
 
0
- graphics.beginFill(0xffffff);
0
+ graphics.beginFill(0x000000);
0
       graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
0
       graphics.endFill();
0
 
0
- var s:Sprite = new Sprite();
0
- s.scaleX = stage.stageWidth / 0x100;
0
- s.scaleY = stage.stageHeight / 100;
0
- addChild(s);
0
+// s.scaleX = stage.stageWidth / 0x100;
0
+// s.scaleY = stage.stageHeight / 100;
0
+
0
+ var url:String = loaderInfo.parameters['url'];
0
 
0
+ // url ="http://localhost/tmp/hist/2425207410_03b24e57b9.jpg";
0
+ // url = "http://farm4.static.flickr.com/3048/2425207410_03b24e57b9.jpg";
0
+
0
+ // log(url);
0
       var loader:Loader = new Loader();
0
- var req:URLRequest = new URLRequest(loaderInfo.parameters['url']);
0
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (event:Event):void {
0
- var loader:Loader = Loader(event.target.loader);
0
+ var req:URLRequest = new URLRequest(url);
0
+ loader.contentLoaderInfo.addEventListener(Event.COMPLETE, drawHistograms);
0
+ loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, function (e:Event):void {
0
+ // log(e);
0
+ });
0
+
0
+ var context:LoaderContext = new LoaderContext();
0
+ context.checkPolicyFile = true;
0
+ loader.load(req, context);
0
+ }
0
+
0
+
0
+ private function drawHistograms (e:Event):void {
0
+ var loader:Loader = Loader(e.target.loader);
0
         var image:Bitmap = Bitmap(loader.content);
0
 
0
- createHistogram(image.bitmapData, s);
0
- });
0
- loader.load(req);
0
+ var cmfs:Array = [
0
+ {
0
+ name : "Red",
0
+ color : 0xcc0000,
0
+ filter : redFilter
0
+ },
0
+ {
0
+ name : "Green",
0
+ color : 0x009900,
0
+ filter : greenFilter
0
+ },
0
+ {
0
+ name : "Blue",
0
+ color : 0x0000cc,
0
+ filter : blueFilter
0
+ },
0
+ ];
0
+
0
+ for (var i:uint = 0; i < cmfs.length; i++) {
0
+ var s:Sprite = new Sprite();
0
+ addChild(s);
0
+ with (s.graphics) {
0
+ lineStyle(1);
0
+ beginFill(0xffffff);
0
+ drawRect(0, 0, 0x100, 100);
0
+ endFill();
0
+ }
0
+
0
+ s.graphics.lineStyle(1, cmfs[i].color);
0
+ createHistogram(image.bitmapData, s, cmfs[i].filter);
0
+
0
+ with (s.graphics) {
0
+ lineStyle(1);
0
+ drawRect(0, 0, 0x100, 100);
0
+ }
0
+ s.y = i * 110;
0
+ }
0
+
0
     }
0
 
0
     // http://d.hatena.ne.jp/nitoyon/20071009/as3_histogram1
0
     // ヒストグラムを作成する
0
- private function createHistogram(bmd:BitmapData, s:Sprite):void {
0
- // グレースケール化
0
- var cmf:ColorMatrixFilter = new ColorMatrixFilter(
0
- [
0
- 1 / 3, 1 / 3, 1 / 3, 0, 0,
0
- 1 / 3, 1 / 3, 1 / 3, 0, 0,
0
- 1 / 3, 1 / 3, 1 / 3, 0, 0
0
- ]
0
- );
0
+ private function createHistogram(bmd:BitmapData, s:Sprite, cmf:ColorMatrixFilter):void {
0
       var bmd2:BitmapData = bmd.clone();
0
       bmd2.applyFilter(bmd2, bmd2.rect, new Point(), cmf);
0
 
0
@@ -55,10 +119,10 @@ package {
0
 
0
       // 描画
0
       var max:int = bmd.width * bmd.height / 50;
0
- s.graphics.lineStyle(1);
0
+ var g:Graphics = s.graphics;
0
       for (i = 0; i < 0x100; i++) {
0
- s.graphics.moveTo(i, 100);
0
- s.graphics.lineTo(i, Math.max(0, 100 - values[i] / max * 100));
0
+ g.moveTo(i, 100);
0
+ g.lineTo(i, Math.max(0, 100 - values[i] / max * 100));
0
       }
0
     }
0
   }
...
7
8
9
10
 
11
12
13
...
7
8
9
 
10
11
12
13
0
@@ -7,7 +7,7 @@
0
     <embed
0
       width="255"
0
       height="100"
0
- flashvars="url=./2425207194_48d6f2bf0d.jpg"
0
+ flashvars="url=http://farm3.static.flickr.com/2134/2425207194_48d6f2bf0d.jpg"
0
       quality="high"
0
       name="idswf"
0
       id="idswf"

Comments

    No one has commented yet.