0

次のコードを使用して、特定のピクセル位置から RGB カラーを取得しています。

public Color GetColorAt(Point location)
{
    using (Graphics gdest = Graphics.FromImage(screenPixel))
    {
        using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero))
        {
            IntPtr hSrcDC = gsrc.GetHdc();
            IntPtr hDC = gdest.GetHdc();
            int retval = BitBlt(hDC, 0, 0, 1, 1, hSrcDC, location.X, location.Y, (int)CopyPixelOperation.SourceCopy);
            gdest.ReleaseHdc();
            gsrc.ReleaseHdc();
        }
    }

    return screenPixel.GetPixel(0, 0);
}

しかし、たとえば 10x10 ピクセルのグラフを保存する方法はありますか? 私の目標は、あるグラフを別のグラフと比較して、それらが同一かどうかを確認することです。

4

1 に答える 1

1

例のように、画面の一部を任意のサイズにコピーするメソッドを作成できますBitmap(画面よりも大きなビットマップを作成していないと仮定すると、その場合はサイズを確認する必要があります)。

public Bitmap GetPartOfTheScreen(Point location, Size size)
{
    Bitmap screenPartCopy = new Bitmap(size.Width, size.Height);
    using (Graphics gdest = Graphics.FromImage(screenPartCopy))
    {
        using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero))
        {
            IntPtr hSrcDC = gsrc.GetHdc();
            IntPtr hDC = gdest.GetHdc();
            int retval = BitBlt(hDC, 0, 0, size.Width, size.Height, hSrcDC, location.X, location.Y, (int)CopyPixelOperation.SourceCopy);
            gdest.ReleaseHdc();
            gsrc.ReleaseHdc();
        }
    }

    return screenPartCopy;
}

画面の一部を取得したら、GetPixel(遅いアプローチ)を使用してピクセルの色を比較するかLockBits、Bitmap クラスのメソッドを利用してピクセルを比較できます。

于 2012-12-12T19:43:24.800 に答える