Bitbltを使用して、デスクトップピクセルの色をキャプチャします

StackOverflow https://stackoverflow.com/questions/4555279

  •  13-10-2019
  •  | 
  •  

質問

現在、getPixel()を使用して、色を取得するためにデスクトップから約64ピクセルを取得しています。 GetPixel()が遅いことについて読みましたが、数ピクセルでは問題ではないとは思いませんでしたが、ルーチンを実行するたびに1.5秒ほどかかります。いくつかの調査を行った後、私はBitbltが私が探しているもののように思えると結論付けました。私がやりたいのは、デスクトップの定義された領域(すべてのウィンドウを含む)をつかみ、特定のオフセットでピクセルの色をつかむことです。これが私が今していることです:

     for (y=0;y<=7;y++) {
     for (x=0;x<=7;x++) {
     //gameScreen is a struct containing the offset from the top left of the monitor
     //to the area of the screen I need
         grid[y][x]=getColor(gameScreen.x+((x*40)+20),gameScreen.y+((y*40)+20));
         }
     }

int getColor(int x, int y) {
//create new point at given coordinates
POINT point;
point.x=x;
point.y=y;
//convert to logical points
DPtoLP(desktopDC,&point,2);
//get pixel color
//desktopDC is an HDC from GetWindowDC(GetDesktopWindow())
int pixel=GetPixel(desktopDC,point.x,point.y);
return pixel;

}

私はかなりの量のチュートリアルとドキュメントを見つけましたが、Windows APIにとって非常に新しいことは、私にとってあまりしていません。ありがとう!

役に立ちましたか?

解決

あなたはおそらく望んでいます:

  • CreateCompatibledC
  • CreateCompatibleBitMap
  • Objectを選択して、元のビットマップを保存します
  • Bitblt
  • getDibits
  • Objectを選択し、元のビットマップを元に戻します
  • deleteBitMap
  • deletedC

定期的にこれを行っている場合は、最初の3つのステップを1回だけ行う必要があります。 BitBltGetDIBits, 、そしてあなたのプログラムが終了するときの最後の3つ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top