DOBON.NET DOBON.NETプログラミング掲示板過去ログ

画面の色を取得

  • 題名: 画面の色を取得
  • 著者: KC
  • 日時: 2007/03/05 22:41:22
  • ID: 19254
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[C# WinXP]
分類:[.NET]

画面上のマウスカーソルのあるピクセルの色を取得したいです、
下記のようにできたはできたのですが、処理も遅く、CPUもすごく使ってしまいます。(処理的にも泥臭い?)
使い方はマウスを動かすと、そのFormの色を変えています。
現在は下記の処理を、Timerにて、インターバル=1で動かしています。

Bitmap bmp;
// キャプチャ
Rectangle rc= Screen.GetBounds(System.Windows.Forms.Cursor.Position);
// Rectangle → Bitmap
bmp = new Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(rc.X, rc.Y, 0, 0,
rc.Size, CopyPixelOperation.SourceCopy);
}
return bmp.GetPixel(point.X, point.Y);


別のやり方、処理速度の向上を目指したいのですが、何か方法がありましたらよろしくお願いします、
2007/03/06(Tue) 05:00:41 編集(投稿者)

画面全体をキャプチャする必要は無いのではないでしょうか?必要な部分(この場合はマウスの位置の1ドットだけでしょう)だけでよいのではないでしょうか?

また、Bitmapをその都度作成する必要もなさそうです。
回答ありがとうございます。
画面全体の場合はできております。
上記のビットマップよりピクセル単位(1ドット)の色の取得はできております。
今回やりたいことは、管理人 さんのおっしゃるとおり
>必要な部分(この場合はマウスの位置の1ドットだけでしょう)だけ
なのです。
サンプルソースでもできるのですが、記載したとおり、処理速度が遅く、CPU負荷が大きいのです。
せめて、処理速度を上げることができるとうれしいのですが。
さらに情報等ございましたらよろしくお願いします。
> サンプルソースでもできるのですが、記載したとおり、処理速度が遅く、CPU負荷が大きいのです。
> せめて、処理速度を上げることができるとうれしいのですが。

要するに GetPixel() が重たい、ってことなら Bitmap.LockBits() について調べてみてください。
■No19258に返信(KCさんの記事)
> 画面全体の場合はできております。
> 上記のビットマップよりピクセル単位(1ドット)の色の取得はできております。
> 今回やりたいことは、管理人 さんのおっしゃるとおり
> >必要な部分(この場合はマウスの位置の1ドットだけでしょう)だけ
> なのです。

私の回答をよく読んでいただければお分かりいただけると思いますが、私の提案は、CopyFromScreenメソッドで画面全体をコピーするのではなく、マウスカーソルのある位置の1ドットだけをコピーしたほうが良いのではないかということです。

DOBON.NET | プログラミング道 | プログラミング掲示板