比较像素图表

时间:2012-12-12 19:32:11

标签: c# winforms

我正在使用以下代码从某个像素位置获取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像素的图表?我的目标是将一张图表与另一张图表进行比较,看看它们是否相同。

1 个答案:

答案 0 :(得分: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(慢速方法)比较像素颜色,或者您可以利用Bitmap类的LockBits方法来比较像素。