2012-12-12 65 views
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像素?我的目标是将一张图表与另一张图表进行比较,看看它们是否相同。

回答

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方法的优势,像素比较。

+0

谢谢,看起来就像我需要的东西! – Johan

+0

没问题,很高兴我能帮上忙。 –