2010-12-29 2 views
0

今は、GetPixel()を使用してデスクトップから約64ピクセルを取得し、その色を取得しています。私はGetPixel()については遅いが、それはいくつかのピクセルの問題はないと思ったが、私はルーチンを実行するたびに1.5秒かかると思った。いくつかの研究をした後、私はbitbltが私が探しているもののように思えると結論づけました。私がしたいことは、(すべてのウィンドウを含む)デスクトップの定義された領域をつかんで、与えられたオフセットでピクセルの色をつかむことです。ここで私が今やっているものです: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に非常に新しいものました。ありがとう!あなたは、おそらく希望している

+1

このコードはBitBltを呼び出すようには見えません。あなたの質問が何であるかは明確ではありません。このコードに問題がありますか、まだ書いていないコードがありますか? –

+0

さて、私はBitBltを使用していませんが、したいと思います。私はドキュメントを見てきましたが、それを得ることはできません。 GetPixel()ルーチンをBitBltに置き換えたいのですが! –

+1

その後、いくつかのコードを書いて試してみてください。次に、あなたのコードをここに掲示して、あなたが何をしたのか、なぜあなたが立ち往生しているのかを説明します。 –

答えて

2

  • CreateCompatibleDC
  • CreateCompatibleBitmap
  • SelectObject、バック
  • を元のビットマップを入れ、
  • GetDIBits
  • SelectObjectのBitBlt
  • 元のビットマップ
  • を保存します
  • DeleteBitmap
  • DeleteDC

あなたが定期的にこれをやっている場合、あなたは、一度だけ最初の3つの手順を行う必要があり、あなたのプログラムが終了したときにBitBltGetDIBits、最後の3つを繰り返します。

+0

それはそれをするだろう!ありがとう! –

+0

大歓迎です。 –

関連する問題