root/lang/cpluspluscli/OpenCvSharp2/trunk/OpenCvSharp/Struct/CvColor.cs @ 31149

Revision 31149, 7.7 kB (checked in by schima, 6 years ago)

Delaunayをだいぶ実装

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Runtime.InteropServices;
5using System.Text;
6
7namespace KwsmLab.OpenCvSharp
8{
9    /// <summary>
10        /// 色をあらわす構造体.
11        /// OpenCVのCvScalarや、System.Drawing.Colorとの暗黙の変換が定義されている.
12        /// </summary>
13    [Serializable]
14    [StructLayout(LayoutKind.Sequential)]
15    public struct CvColor : IEquatable<CvColor>
16    {
17        /// <summary>
18        /// R成分
19        /// </summary>
20        public byte R;
21        /// <summary>
22        /// G成分
23        /// </summary>
24        public byte G;
25        /// <summary>
26        /// B成分
27        /// </summary>
28        public byte B;
29
30        /// <summary>
31        /// 初期化
32        /// </summary>
33        /// <param name="r">R成分</param>
34        /// <param name="g">G成分</param>
35        /// <param name="b">B成分</param>
36        public CvColor(byte r, byte g, byte b)
37        {
38            this.R = r;
39            this.G = g;
40            this.B = b;
41        }
42        /// <summary>
43        /// ランダムな色を生成して返す
44        /// </summary>
45        /// <returns></returns>
46        public static CvColor Random()
47        {
48            System.Random rand = new System.Random();
49            return new CvColor((byte)rand.Next(byte.MaxValue), (byte)rand.Next(byte.MaxValue), (byte)rand.Next(byte.MaxValue));
50        }
51
52
53        #region キャスト
54        /// <summary>
55            /// CvColorからCvScalarクラスに変換する暗黙のキャスト
56            /// </summary>
57            /// <param name="self"></param>
58            /// <returns>CvScalar構造体</returns>
59            public static implicit operator CvScalar(CvColor self)
60            {
61                    return new CvScalar(self.B, self.G, self.R, 0);
62            }
63            /// <summary>
64            /// CvScalarクラスからCvColorに変換する暗黙のキャスト
65            /// </summary>
66            /// <param name="s"></param>
67            /// <returns>CvColor</returns>
68            public static implicit operator CvColor(CvScalar s)
69            {
70                    return new CvColor((byte)s.Val2, (byte)s.Val1, (byte)s.Val0);
71            }
72        /// <summary>
73            /// CvColorからSystem.Drawing.Colorに変換する暗黙のキャスト
74            /// </summary>
75            /// <param name="self"></param>
76        /// <returns>System.Drawing.Color</returns>
77            public static implicit operator System.Drawing.Color(CvColor self)
78            {
79                    return System.Drawing.Color.FromArgb(self.R, self.G, self.B);
80            }
81        /// <summary>
82            /// System.Drawing.ColorからCvColorに変換する暗黙のキャスト
83            /// </summary>
84            /// <param name="c"></param>
85            /// <returns>CvColor</returns>
86            public static implicit operator CvColor(System.Drawing.Color c)
87            {
88                    return new CvColor(c.R, c.G, c.B);
89            }
90        #endregion
91
92        /// <summary>
93            /// == 演算子のオーバーロード。RGB成分が等しければtrueを返す
94            /// </summary>
95            /// <param name="lhs">左辺値</param>
96            /// <param name="rhs">右辺値</param>
97            /// <returns>等しければtrue</returns>
98            public static bool operator==(CvColor lhs, CvColor rhs)
99            {
100                    return lhs.Equals(rhs);
101            }
102        /// <summary>
103        /// != 演算子のオーバーロード
104        /// </summary>
105        /// <param name="lhs">左辺値</param>
106        /// <param name="rhs">右辺値</param>
107        /// <returns>等しくなければtrue</returns>
108        public static bool operator !=(CvColor lhs, CvColor rhs)
109        {
110            return !lhs.Equals(rhs);
111        }
112        /// <summary>
113            /// 指定したCvColorとRGB値が等しければtrueを返す
114            /// </summary>
115            /// <param name="cs">比較対象</param>
116            /// <returns>等しければtrue</returns>
117            public bool Equals(CvColor cs)
118            {
119                    return (this.R == cs.R && this.G == cs.G && this.B == cs.B);
120            }
121
122        /// <summary>
123        /// Equalsのオーバーライド
124        /// </summary>
125        /// <param name="obj"></param>
126        /// <returns></returns>
127        public override bool Equals(object obj)
128        {
129            return base.Equals(obj);
130        }
131        /// <summary>
132        /// GetHashCodeのオーバーライド
133        /// </summary>
134        /// <returns></returns>
135        public override int GetHashCode()
136        {
137            return R.GetHashCode() + G.GetHashCode() + B.GetHashCode();
138        }
139        /// <summary>
140            /// 文字列形式を返す
141            /// </summary>
142            /// <returns>文字列形式</returns>
143            public override string ToString()
144            {
145                    return string.Format("CvColor (r:{0} g:{1} b:{2})", R, G, B);
146            }
147
148        #region 色定数
149        /// <summary>
150        /// 黒をあらわす色定数を取得する
151        /// </summary>
152        static public CvColor Black { get { return new CvColor(0, 0, 0); } }
153        /// <summary>
154        /// 白をあらわす色定数を取得する
155        /// </summary>
156        static public CvColor White { get { return new CvColor(255, 255, 255); } }
157        /// <summary>
158        /// グレーをあらわす色定数を取得する
159        /// </summary>
160        static public CvColor Gray { get { return new CvColor(128, 128, 128); } }
161        /// <summary>
162        /// ピンクをあらわす色定数を取得する
163        /// </summary>
164        static public CvColor Pink { get { return new CvColor(255, 192, 203); } }
165        /// <summary>
166        /// 赤をあらわす色定数を取得する
167        /// </summary>
168        static public CvColor Red { get { return new CvColor(255, 0, 0); } }
169        /// <summary>
170        /// マゼンタをあらわす色定数を取得する
171        /// </summary>
172        static public CvColor Magenta { get { return new CvColor(255, 0, 255); } }
173        /// <summary>
174        /// ライトグリーンをあらわす色定数を取得する
175        /// </summary>
176        static public CvColor LightGreen { get { return new CvColor(144, 238, 144); } }
177        /// <summary>
178        /// 緑をあらわす色定数を取得する
179        /// </summary>
180        static public CvColor Green { get { return new CvColor(0, 255, 0); } }
181        /// <summary>
182        /// ダークグリーンをあらわす色定数を取得する
183        /// </summary>
184        static public CvColor DarkGreen { get { return new CvColor(0, 100, 0); } }
185        /// <summary>
186        /// シアンをあらわす色定数を取得する
187        /// </summary>
188        static public CvColor Cyan { get { return new CvColor(0, 255, 255); } }
189        /// <summary>
190        /// 青をあらわす色定数を取得する
191        /// </summary>
192        static public CvColor Blue { get { return new CvColor(0, 0, 255); } }
193        /// <summary>
194        /// ネイビーをあらわす色定数を取得する
195        /// </summary>
196        static public CvColor Navy { get { return new CvColor(0, 0, 128); } }
197        /// <summary>
198        /// 黄色をあらわす色定数を取得する
199        /// </summary>
200        static public CvColor Yellow { get { return new CvColor(255, 217, 0); } }
201        /// <summary>
202        /// オレンジをあらわす色定数を取得する
203        /// </summary>
204        static public CvColor Orange { get { return new CvColor(255, 165, 0); } }
205        /// <summary>
206        /// 紫をあらわす色定数を取得する
207        /// </summary>
208        static public CvColor Violet { get { return new CvColor(238, 130, 238); } }
209        /// <summary>
210        /// 茶色をあらわす色定数を取得する
211        /// </summary>
212        static public CvColor Brown { get { return new CvColor(165, 42, 42); } }
213        #endregion
214    }
215}
Note: See TracBrowser for help on using the browser.