質問編集履歴

2

追記としてコードを追加した

2016/01/28 10:11

投稿

aridai1221
aridai1221

スコア45

test CHANGED
File without changes
test CHANGED
@@ -29,3 +29,167 @@
29
29
 
30
30
 
31
31
  どのようにすれば実装することができるのでしょうか。
32
+
33
+
34
+
35
+ 追記
36
+
37
+ コード載せておきます
38
+
39
+
40
+
41
+ ```C#
42
+
43
+ // てきとーにusing文
44
+
45
+ using System;
46
+
47
+ using System.Drawing;
48
+
49
+ using System.Windows.Forms;
50
+
51
+
52
+
53
+ // Win32APIを使用するのに必要
54
+
55
+ using System.Runtime.InteropServices;
56
+
57
+
58
+
59
+ // てきとーに省略
60
+
61
+ // (てきとーなクラス内に記述)
62
+
63
+ private int R, G, B;
64
+
65
+ private Timer timer = null;
66
+
67
+
68
+
69
+ private void hoge()
70
+
71
+ {
72
+
73
+ // タイマー
74
+
75
+ timer = new Timer();
76
+
77
+ timer.Interval = 50;
78
+
79
+
80
+
81
+ // てきとーなタイミングでタイマースタート
82
+
83
+ timer.Start();
84
+
85
+
86
+
87
+ // 定期的に呼ばれる処理
88
+
89
+ timer.Tick += (object sender, EventArgs e) =>
90
+
91
+ {
92
+
93
+ // マウスの左ボタンがクリックされたら
94
+
95
+ if (isLButtonDown())
96
+
97
+ {
98
+
99
+ // マウスカーソルの絶対座標
100
+
101
+ int x = Control.MousePosition.X;
102
+
103
+ int y = Control.MousePosition.Y;
104
+
105
+
106
+
107
+ // RGB値を抜き出す処理
108
+
109
+ pickupPixelColor(x, y);
110
+
111
+
112
+
113
+ /*
114
+
115
+ 処理が完了したので
116
+
117
+ タイマーをStopするなり、
118
+
119
+ 他の処理を書くなり
120
+
121
+ てきとーにする
122
+
123
+ */
124
+
125
+ }
126
+
127
+ }
128
+
129
+ }
130
+
131
+
132
+
133
+ // Win32APIの使用 (catsforepawさんのコード)
134
+
135
+ [DllImport("user32.dll")]
136
+
137
+ private static extern short GetKeyState(int nVirtKey);
138
+
139
+
140
+
141
+ // マウス左ボタンが押されているかどうかをチェック
142
+
143
+ private bool isLButtonDown()
144
+
145
+ {
146
+
147
+ // 押された状態だと最上位ビットが1になるので、負数かどうかで判定可能
148
+
149
+ return GetKeyState(0x01) < 0;
150
+
151
+ }
152
+
153
+
154
+
155
+ // 指定した画面上の座標のRGB値を取得する
156
+
157
+ private void pickupPixelColor(int x, int y)
158
+
159
+ {
160
+
161
+ // 1x1のサイズのBitmapを生成する
162
+
163
+ Bitmap bitmap = new Bitmap(1, 1);
164
+
165
+
166
+
167
+ // 先ほどのBitmapを元にGraphicsを生成する
168
+
169
+ Graphics graphics = Graphics.FromImage(bitmap);
170
+
171
+
172
+
173
+ // Bitmapに指定座標のスクリーンショットをコピーする
174
+
175
+ graphics.CopyFromScreen(new Point(x, y), new Point(0, 0), new Size(1, 1));
176
+
177
+
178
+
179
+ // BitmapからColorのインスタンスを取得する
180
+
181
+ Color color = bitmap.GetPixel(0, 0);
182
+
183
+
184
+
185
+ // RGB値を保存する
186
+
187
+ R = color.R;
188
+
189
+ G = color.G;
190
+
191
+ B = color.B;
192
+
193
+ }
194
+
195
+ ```

1

タグの追加

2016/01/28 10:11

投稿

aridai1221
aridai1221

スコア45

test CHANGED
File without changes
test CHANGED
File without changes