OSDN Git Service

12313
[psychlops/silverlight.git] / dev4 / psychlops / core / graphic / image.cs
1 using System;\r
2 using System.Windows;\r
3 using System.Windows.Controls;\r
4 using System.Windows.Documents;\r
5 using System.Windows.Input;\r
6 using System.Windows.Media;\r
7 using System.Windows.Media.Animation;\r
8 using System.Windows.Media.Imaging;\r
9 using System.Windows.Shapes;\r
10 \r
11 \r
12 namespace Psychlops{\r
13 \r
14 \r
15         public partial class Image : Internal.PrimitiveFigure\r
16         {\r
17                 public WriteableBitmap buffer;\r
18                 public Point datum { get; set; }\r
19                 public Point getDatum() { return datum; }\r
20                 public Point setDatum(Point p) { datum = p; return datum; }\r
21                 public Rectangle self_rect;\r
22                 protected bool AsyncBool;\r
23 \r
24                 public Image() \r
25                 {\r
26                         self_rect = new Rectangle(1, 1);\r
27                         initialize__(1, 1);\r
28                 }\r
29 \r
30                 public Image(string uri)\r
31                 {\r
32                         self_rect = new Rectangle();\r
33                         load__(uri);\r
34                 }\r
35 \r
36                 public Image(int wid, int hei)\r
37                 {\r
38                         self_rect = new Rectangle(wid, hei);\r
39                         initialize__(wid, hei);\r
40                 }\r
41                 public Image(double wid, double hei)\r
42                 {\r
43                         self_rect = new Rectangle(Math.round(wid), Math.round(hei));\r
44                         initialize__((int)Math.round(wid), (int)Math.round(hei));\r
45                 }\r
46 \r
47                 public Image set(int wid, int hei)\r
48                 {\r
49                         self_rect = new Rectangle(wid, hei);\r
50                         initialize__(wid, hei);\r
51                         return this;\r
52                 }\r
53                 public Image set(double wid, double hei)\r
54                 {\r
55                         self_rect = new Rectangle(Math.round(wid), Math.round(hei));\r
56                         initialize__((int)Math.round(wid), (int)Math.round(hei));\r
57                         return this;\r
58                 }\r
59 \r
60                 public Figure shift(Point p)\r
61                 {\r
62                         datum = datum + p;\r
63                         return this;\r
64                 }\r
65                 public Figure centering(Point p)\r
66                 {\r
67                         datum = new Point( p.x - width / 2.0, p.y - height / 2.0);\r
68                         return this;\r
69                 }\r
70                 public Image move_to(Point p) { datum = p; return this; }\r
71                 public Image move_to(double x, double y, double z) { datum = new Point(x, y, z); return this; }\r
72                 public Image locate(Point p) { datum = p; return this; }\r
73                 public Image locate(double x, double y, double z) { datum = new Point(x, y, z); return this; }\r
74 \r
75                 public void pix(int x, int y, Color col)\r
76                 {\r
77                         buffer.SetPixel(x, y, col);\r
78                 }\r
79 \r
80                 public void release()\r
81                 {\r
82                 }\r
83 \r
84                 public void cache(bool on_off = true)\r
85                 {\r
86                 }\r
87 \r
88                 public void alpha(int x, int y, double a)\r
89                 {\r
90                         buffer.SetPixel(x, y, (byte)(a*255), buffer.GetPixel(x, y));\r
91                 }\r
92 \r
93                 public void clear(Color col)\r
94                 {\r
95                         for (int y = 0; y < height; y++)\r
96                         {\r
97                                 for (int x = 0; x < width; x++)\r
98                                 {\r
99                                         pix(x, y, col);\r
100                                 }\r
101                         }\r
102                 }\r
103 \r
104 \r
105                 public void field(System.Func<int, int, System.Windows.Media.Color> func)\r
106                 {\r
107                         field__(func);\r
108                 }\r
109                 public void field(System.Func<int, int, System.Windows.Media.Color, System.Windows.Media.Color> func)\r
110                 {\r
111                         field__(func);\r
112                 }\r
113                 public void each(System.Func<int, int, System.Windows.Media.Color> func)\r
114                 {\r
115                         field__(func);\r
116                 }\r
117                 public void each(System.Func<int, int, System.Windows.Media.Color, System.Windows.Media.Color> func)\r
118                 {\r
119                         field__(func);\r
120                 }\r
121 \r
122                 public void load(string uri)\r
123                 {\r
124                         load__(uri);\r
125                 }\r
126 \r
127                 public void draw()\r
128                 {\r
129                         Main.drawable.image(this);\r
130                 }\r
131 \r
132 \r
133                 public double width { get { return self_rect.width; } }\r
134                 public double height { get { return self_rect.height; } }\r
135                 public Point center { get { return new Point(width/2.0, height/2.0); } }\r
136                 public double getWidth() { return width; }\r
137                 public double getHeight() { return height; }\r
138                 public Point getCenter() { return center; }\r
139                 public double getHcenter() { return width / 2.0; }\r
140                 public double getVcenter() { return height / 2.0; }\r
141 \r
142                 public double left { get { return datum.x; } }\r
143                 public double right { get { return datum.x + width; } }\r
144                 public double top { get { return datum.y; } }\r
145                 public double bottom { get { return datum.y + height; } }\r
146                 public double getLeft() { return left; }\r
147                 public double getRight() { return right; }\r
148                 public double getTop() { return top; }\r
149                 public double getBottom() { return bottom; }\r
150 \r
151         }\r
152 \r
153 \r
154 }