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(慢速方法)比较像素颜色,或者您可以利用LockBitsBitmap 类的方法来比较像素。

于 2012-12-12T19:43:24.800 回答