1

現在、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に慣れていないため、あまり効果がありません。ありがとう!

4

1 に答える 1

4

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

  • CreateCompatibleDC
  • CreateCompatibleBitmap
  • SelectObject、元のビットマップを保存
  • BitBlt
  • GetDIBits
  • SelectObject、元のビットマップを元に戻す
  • DeleteBitmap
  • DeleteDC

これを定期的に行う場合は、最初の3つの手順を1回だけ実行し、とを繰り返しBitBltGetDIBitsプログラムが終了したら最後の3つの手順を実行する必要があります。

于 2010-12-29T19:58:34.030 に答える