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