|
■No79100 (かな さん) に返信 > pictureboxをクリックしたときに テスト段階では、MouseMove を使うと分かりやすいかも。
> new Point(e.Location.X, e.Location.Y) 「new Point(e.Location.X, e.Location.Y)」は 「e.Location」と同義ですよ。
> Bitmap bitmap = new Bitmap(1, 1); > Graphics g = Graphics.FromImage(bitmap); オブジェクトの破棄を忘れています。 using しましょう。
> g.CopyFromScreen(new Point(e.Location.X, e.Location.Y), new Point(0, 0), new Size(1, 1)); PictureBox の左上を、デスクトップの左上に見立てて、 相対座標指定で、縦横 1 ドットだけの転写を行っているのですね。
> pictureboxのbackcolorを黒にしても PictureBox の (15, 15) の座標をクリックした場合、 デスクトップの (15, 15) の色を調べるのですよね?
であれば、PictureBox の色は関係ないかと。
> RGB値がおかしな数値になります。 期待している RGB 値と、 実際の RGB 値はいくつですか?
// PictureBox の (x, y) の位置にカーソルを当てると、 // (PictureBox ではなく)スクリーンの (x, y) の色を取得する private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { using (Bitmap bitmap = new Bitmap(1, 1)) using (Graphics g = Graphics.FromImage(bitmap)) { g.CopyFromScreen(e.Location, new Point(0, 0), new Size(1, 1)); Color color = bitmap.GetPixel(0, 0); pictureBox1.BackColor = color; Text = string.Format("{0} => R:{1}, G:{2}, B:{3}", e.Location, color.R, color.G, color.B); } }
ちなみに、上記で g.CopyFromScreen(Cursor.Position, new Point(0, 0), new Size(1, 1)); に変更した場合、「PictureBox 上で MouseDown したままドラッグ」すると、 ドラッグ中の現在座標にある色情報が転写されます。
|