グラフィックストリーム内の特定のピクセルの位置を計算する方法は? このストリームは、私のプライマリ モニターのスクリーンショットです。ピクセルの位置が必要だとしましょう:
0, 0
0, 10
10, 0
10, 10
DirectX 9 SDK を使用しています。これは、位置を計算するために (この
チュートリアル
から)使用するコードの一部です。
const int Bpp = 4;
int o = 20;
int m = 8;
int screenWidthMinusM = Screen.PrimaryScreen.Bounds.Width - m;
int screenHeightMinusM = Screen.PrimaryScreen.Bounds.Height - m;
int bx = (screenWidthMinusM - m) / 3 + m;
int by = (screenHeightMinusM - m) / 3 + m;
int bx2 = (screenWidthMinusM - m) * 2 / 3 + m;
int by2 = (screenHeightMinusM - m) * 2 / 3 + m;
long x, y;
long pos;
y = m;
for (x = m; x < screenWidthMinusM; x += o)
{
pos = (y * Screen.PrimaryScreen.Bounds.Width + x) * Bpp;
if (x < bx) tlPos.Add(pos);
else if (x > bx && x < bx2) tPos.Add(pos);
else if (x > bx2) trPos.Add(pos);
}
ただし、これは、約 53 000 から約 7 000 000 までの番号のコレクションを返します (別の同様の方法から)。その色が抽出された後
Surface s = sc.CaptureScreen();
GraphicsStream gs = s.LockRectangle(LockFlags.None);
byte[] bu = new byte[4];
foreach (long pos in positions)
{
gs.Position = pos;
gs.Read(bu, 0, 4);
r += bu[2];
g += bu[1];
b += bu[0];
i++;
}
これらの位置を含む独自のコレクションを作成する必要があります。