回答編集履歴

1

Arrayに変更

2016/10/06 08:59

投稿

dn315
dn315

スコア200

test CHANGED
@@ -1,4 +1,4 @@
1
- 抽出結果が複数あるので、ループさせて描画するだけです
1
+ 抽出結果が複数あるので、描画するだけです
2
2
 
3
3
  ただ、このコードだとマウス座標が変わる度に
4
4
 
@@ -38,9 +38,9 @@
38
38
 
39
39
 
40
40
 
41
- // 赤枠になっている四角形の座標List
41
+ // 赤枠になっている四角形の座標配列
42
42
 
43
- List<Rectangle> _prev = new List<Rectangle>();
43
+ Rectangle[] _prev = new Rectangle[0];
44
44
 
45
45
 
46
46
 
@@ -72,9 +72,9 @@
72
72
 
73
73
 
74
74
 
75
- // 重いのでとりあえず10個
75
+ // の四角形を作成
76
76
 
77
- for (int i = 0; i < 10; i++)
77
+ for (int i = 0; i < 400; i++)
78
78
 
79
79
  {
80
80
 
@@ -114,53 +114,47 @@
114
114
 
115
115
  // カーソル座標にある四角形を全て抽出
116
116
 
117
- List<Rectangle> hitRects = _rects.AsEnumerable()
117
+ Rectangle[] hitRects = _rects.AsEnumerable()
118
118
 
119
- .Where(v =>
119
+ .Where(v =>
120
120
 
121
- v.X <= e.X && v.Y <= e.Y &&
121
+ v.X <= e.X && v.Y <= e.Y &&
122
122
 
123
123
  (v.X + v.Width) >= e.X && (v.Y + v.Height) >= e.Y)
124
124
 
125
125
  .Select(v => v)
126
126
 
127
- .ToList();
127
+ .ToArray();
128
128
 
129
129
 
130
130
 
131
- // 抽出結果が1個以上あれば描画開始
132
-
133
- if(hitRects.Count > 0)
131
+ using (Graphics g = Graphics.FromImage(pictureBox1.Image))
134
132
 
135
133
  {
136
134
 
135
+ // 前回描画した赤枠を青枠に戻す
136
+
137
- using (Graphics g = Graphics.FromImage(pictureBox1.Image))
137
+ if (_prev.Length > 0)
138
138
 
139
139
  {
140
140
 
141
- if (_prev.Count() > 0)
141
+ using (Pen pen = new Pen(Color.Blue))
142
142
 
143
143
  {
144
144
 
145
- using (Pen pen = new Pen(Color.Blue))
146
-
147
- {
148
-
149
- // 前回描画した赤枠を青枠に戻す
150
-
151
- foreach (Rectangle r in _prev)
152
-
153
- {
154
-
155
- g.DrawRectangle(pen, r);
145
+ g.DrawRectangles(pen, _prev);
156
-
157
- }
158
-
159
- }
160
146
 
161
147
  }
162
148
 
149
+ }
163
150
 
151
+
152
+
153
+ // 抽出結果が1個以上あれば描画開始
154
+
155
+ if (hitRects.Length > 0)
156
+
157
+ {
164
158
 
165
159
  using (Pen pen = new Pen(Color.Red))
166
160
 
@@ -168,13 +162,7 @@
168
162
 
169
163
  // 赤枠四角描画
170
164
 
171
- foreach (Rectangle r in hitRects)
172
-
173
- {
174
-
175
- g.DrawRectangle(pen, r);
165
+ g.DrawRectangles(pen, hitRects);
176
-
177
- }
178
166
 
179
167
  }
180
168