source: Include/Classes/System/Drawing/Color.ab@ 166

Last change on this file since 166 was 166, checked in by イグトランス (egtra), 17 years ago

GetHashCodeを実装

File size: 9.0 KB
Line 
1' Classes/System/Drawing/Color.ab
2
3#ifndef __SYSTEM_DRAWING_COLOR_AB__
4#define __SYSTEM_DRAWING_COLOR_AB__
5
6#include <Classes/System/Math.ab>
7#include <Classes/System/Drawing/Imaging/misc.ab>
8
9Const Enum ColorChannelFlags
10 ColorChannelFlagsC = 0
11 ColorChannelFlagsM
12 ColorChannelFlagsY
13 ColorChannelFlagsK
14 ColorChannelFlagsLast
15End Enum
16
17Class Color
18Public
19 Sub Color()
20 argb = MakeARGB(255, 0, 0, 0) ' Black
21 End Sub
22
23 Sub Color(ByRef c As Color)
24 argb = c.argb
25 End Sub
26
27 Sub Color(r As Byte, g As Byte, b As Byte)
28 argb = MakeARGB(255, r, g, b)
29 End Sub
30
31 Sub Color(a As Byte, r As Byte, g As Byte, b As Byte)
32 argb = MakeARGB(a, r, g, b)
33 End Sub
34
35 Sub Color(newArgb As ARGB)
36 argb = newArgb
37 End Sub
38
39 Sub Operator =(c As Color)
40 argb = c.argb
41 End Sub
42
43 Function Operator ==(c As Color) As Boolean
44 Return Equals(c)
45 End Function
46
47 Function Operator <>(c As Color) As Boolean
48 Return Not Equals(c)
49 End Function
50
51 Function A() As Byte
52 Return (argb >> ALPHA_SHIFT) As Byte
53 End Function
54
55 Function R() As Byte
56 Return (argb >> RED_SHIFT) As Byte
57 End Function
58
59 Function G() As Byte
60 Return (argb >> GREEN_SHIFT) As Byte
61 End Function
62
63 Function B() As Byte
64 Return (argb >> BLUE_SHIFT) As Byte
65 End Function
66
67 Function Value() As ARGB
68 Return argb
69 End Function
70
71 Sub Value(value As ARGB)
72 argb = value
73 End Sub
74
75 Sub SetFromCOLORREF(rgb As COLORREF)
76 If (rgb And &hff000000) = &h01000000 Then
77 Exit Sub ' パレットインデックス指定は無効
78 Else
79 argb = Color_MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb))
80 End If
81 End Sub
82
83 Function ToCOLORREF() As COLORREF
84 ToCOLORREF = RGB(R, G, B)
85 End Function
86
87 Function ToArgb() As ARGB
88 Return argb
89 End Function
90
91 Static Function FromArgb(argb As ARGB) As Color
92 Dim c As Color(argb)
93 Rteurn c
94 End Function
95
96 Static Function FromArgb(a As Byte, base As Color) As Color
97 Dim c As Color(a, base.R, base.G, base.B)
98 Return c
99 End Function
100
101 Static Function FromArgb(r As Byte, g As Byte, b As Byte) As Color
102 Dim c As Color(r, g, b)
103 Return c
104 End Function
105
106 Static Function FromArgb(a As Byte, r As Byte, g As Byte, b As Byte) As Color
107 Dim c As Color(a, r, g, b)
108 Return c
109 End Function
110
111 Override Function GetHashCode() As Long
112 Return argb As Long
113 End Function
114
115 Function Equals(c As Color) As Boolean
116 Return argb = c.argb
117 End Function
118
119 ' HSBを求める式はhttp://ofo.jp/osakana/cgtips/hsb.phtmlを参考にしました。
120 Function GetHue() As Single
121 Dim max As Long, min As Long, d As Long
122 max = Math.Max(Math.Max(r, g), b)
123 min = Math.Min(Math.Min(r, g), b)
124 d = max - min
125 If g = max Then
126 Return (b - r) As Double / d * 60 + 120
127 ElseIf b = max Then
128 Return (r - g) As Double / d * 60 + 240
129 ElseIf g < b Then
130 Return (g - b) As Double / d * 60 + 360
131 Else
132 Return (g - b) As Double / d * 60
133 EndIf
134 End Function
135
136 Function GetSaturation() As Single
137 Dim max As Long, min As Long
138 max = Math.Max(Math.Max(r, g), b)
139 min = Math.Min(Math.Min(r, g), b)
140 Return (max - min) / max
141 End Function
142
143 Function GetBrightness() As Single
144 Dim max As Long
145 max = Math.Max(Math.Max(r, g), b)
146 Return max * (1 / 255)
147 End Function
148
149/*
150 ' Common color constants
151 Const Enum
152 AliceBlue = &hFFF0F8FF
153 AntiqueWhite = &hFFFAEBD7
154 Aqua = &hFF00FFFF
155 Aquamarine = &hFF7FFFD4
156 Azure = &hFFF0FFFF
157 Beige = &hFFF5F5DC
158 Bisque = &hFFFFE4C4
159 Black = &hFF000000
160 BlanchedAlmond = &hFFFFEBCD
161 Blue = &hFF0000FF
162 BlueViolet = &hFF8A2BE2
163 Brown = &hFFA52A2A
164 BurlyWood = &hFFDEB887
165 CadetBlue = &hFF5F9EA0
166 Chartreuse = &hFF7FFF00
167 Chocolate = &hFFD2691E
168 Coral = &hFFFF7F50
169 CornflowerBlue = &hFF6495ED
170 Cornsilk = &hFFFFF8DC
171 Crimson = &hFFDC143C
172 Cyan = &hFF00FFFF
173 DarkBlue = &hFF00008B
174 DarkCyan = &hFF008B8B
175 DarkGoldenrod = &hFFB8860B
176 DarkGray = &hFFA9A9A9
177 DarkGreen = &hFF006400
178 DarkKhaki = &hFFBDB76B
179 DarkMagenta = &hFF8B008B
180 DarkOliveGreen = &hFF556B2F
181 DarkOrange = &hFFFF8C00
182 DarkOrchid = &hFF9932CC
183 DarkRed = &hFF8B0000
184 DarkSalmon = &hFFE9967A
185 DarkSeaGreen = &hFF8FBC8B
186 DarkSlateBlue = &hFF483D8B
187 DarkSlateGray = &hFF2F4F4F
188 DarkTurquoise = &hFF00CED1
189 DarkViolet = &hFF9400D3
190 DeepPink = &hFFFF1493
191 DeepSkyBlue = &hFF00BFFF
192 DimGray = &hFF696969
193 DodgerBlue = &hFF1E90FF
194 Firebrick = &hFFB22222
195 FloralWhite = &hFFFFFAF0
196 ForestGreen = &hFF228B22
197 Fuchsia = &hFFFF00FF
198 Gainsboro = &hFFDCDCDC
199 GhostWhite = &hFFF8F8FF
200 Gold = &hFFFFD700
201 Goldenrod = &hFFDAA520
202 Gray = &hFF808080
203 Green = &hFF008000
204 GreenYellow = &hFFADFF2F
205 Honeydew = &hFFF0FFF0
206 HotPink = &hFFFF69B4
207 IndianRed = &hFFCD5C5C
208 Indigo = &hFF4B0082
209 Ivory = &hFFFFFFF0
210 Khaki = &hFFF0E68C
211 Lavender = &hFFE6E6FA
212 LavenderBlush = &hFFFFF0F5
213 LawnGreen = &hFF7CFC00
214 LemonChiffon = &hFFFFFACD
215 LightBlue = &hFFADD8E6
216 LightCoral = &hFFF08080
217 LightCyan = &hFFE0FFFF
218 LightGoldenrodYellow = &hFFFAFAD2
219 LightGray = &hFFD3D3D3
220 LightGreen = &hFF90EE90
221 LightPink = &hFFFFB6C1
222 LightSalmon = &hFFFFA07A
223 LightSeaGreen = &hFF20B2AA
224 LightSkyBlue = &hFF87CEFA
225 LightSlateGray = &hFF778899
226 LightSteelBlue = &hFFB0C4DE
227 LightYellow = &hFFFFFFE0
228 Lime = &hFF00FF00
229 LimeGreen = &hFF32CD32
230 Linen = &hFFFAF0E6
231 Magenta = &hFFFF00FF
232 Maroon = &hFF800000
233 MediumAquamarine = &hFF66CDAA
234 MediumBlue = &hFF0000CD
235 MediumOrchid = &hFFBA55D3
236 MediumPurple = &hFF9370DB
237 MediumSeaGreen = &hFF3CB371
238 MediumSlateBlue = &hFF7B68EE
239 MediumSpringGreen = &hFF00FA9A
240 MediumTurquoise = &hFF48D1CC
241 MediumVioletRed = &hFFC71585
242 MidnightBlue = &hFF191970
243 MintCream = &hFFF5FFFA
244 MistyRose = &hFFFFE4E1
245 Moccasin = &hFFFFE4B5
246 NavajoWhite = &hFFFFDEAD
247 Navy = &hFF000080
248 OldLace = &hFFFDF5E6
249 Olive = &hFF808000
250 OliveDrab = &hFF6B8E23
251 Orange = &hFFFFA500
252 OrangeRed = &hFFFF4500
253 Orchid = &hFFDA70D6
254 PaleGoldenrod = &hFFEEE8AA
255 PaleGreen = &hFF98FB98
256 PaleTurquoise = &hFFAFEEEE
257 PaleVioletRed = &hFFDB7093
258 PapayaWhip = &hFFFFEFD5
259 PeachPuff = &hFFFFDAB9
260 Peru = &hFFCD853F
261 Pink = &hFFFFC0CB
262 Plum = &hFFDDA0DD
263 PowderBlue = &hFFB0E0E6
264 Purple = &hFF800080
265 Red = &hFFFF0000
266 RosyBrown = &hFFBC8F8F
267 RoyalBlue = &hFF4169E1
268 SaddleBrown = &hFF8B4513
269 Salmon = &hFFFA8072
270 SandyBrown = &hFFF4A460
271 SeaGreen = &hFF2E8B57
272 SeaShell = &hFFFFF5EE
273 Sienna = &hFFA0522D
274 Silver = &hFFC0C0C0
275 SkyBlue = &hFF87CEEB
276 SlateBlue = &hFF6A5ACD
277 SlateGray = &hFF708090
278 Snow = &hFFFFFAFA
279 SpringGreen = &hFF00FF7F
280 SteelBlue = &hFF4682B4
281 Tan = &hFFD2B48C
282 Teal = &hFF008080
283 Thistle = &hFFD8BFD8
284 Tomato = &hFFFF6347
285 Transparent = &h00FFFFFF
286 Turquoise = &hFF40E0D0
287 Violet = &hFFEE82EE
288 Wheat = &hFFF5DEB3
289 White = &hFFFFFFFF
290 WhiteSmoke = &hFFF5F5F5
291 Yellow = &hFFFFFF00
292 YellowGreen = &hFF9ACD32
293 End Enum
294
295 ' Shift count and bit mask for A, R, G, B components
296
297 Const Enum
298 AlphaShift = 24
299 RedShift = 16
300 GreenShift = 8
301 BlueShift = 0
302 End Enum
303
304 Const Enum
305 AlphaMask = &hff000000
306 RedMask = &h00ff0000
307 GreenMask = &h0000ff00
308 BlueMask = &h000000ff
309 End Enum
310*/
311 Static Function MakeARGB(a As Byte, r As Byte, g As Byte, b As Byte) As ARGB
312 MakeARGB = (((b As ARGB) << BLUE_SHIFT) Or _
313 ((g As ARGB) << GREEN_SHIFT) Or _
314 ((r As ARGB) << RED_SHIFT) Or _
315 ((a As ARGB) << ALPHA_SHIFT))
316 End Function
317
318Protected
319 argb As ARGB
320End Class
321
322#endif '__SYSTEM_DRAWING_COLOR_AB__
Note: See TracBrowser for help on using the repository browser.