C# 如何在鼠标位置(RFC)获取面板像素的颜色

C# 如何在鼠标位置(RFC)获取面板像素的颜色,c#,colors,panel,rfc,getpixel,C#,Colors,Panel,Rfc,Getpixel,我爱你,所以。在10个问题中的8个问题中,它给出了一个简单且立即可用的答案。或者至少可以解释为什么我的问题是错误的 所以我觉得很奇怪,我找不到一个答案来回答我喜欢的这个简单的,我已经回避了,相当普通的问题 在搜索了高低之后,我将下面的解决方案拼凑在一起。它工作正常,但我想知道: 它有缺陷吗?(例如:我需要处理吗?) 有没有更好的解决方案,也许是减少复制 我希望看到一个带有CopyFromScreen的解决方案,它可能只使用1x1位图大小,但需要一个图形。。因此,我们希望有一个替代方案 或者直

我爱你,所以。在10个问题中的8个问题中,它给出了一个简单且立即可用的答案。或者至少可以解释为什么我的问题是错误的

所以我觉得很奇怪,我找不到一个答案来回答我喜欢的这个简单的,我已经回避了,相当普通的问题

在搜索了高低之后,我将下面的解决方案拼凑在一起。它工作正常,但我想知道:

  • 它有缺陷吗?(例如:我需要处理吗?)

  • 有没有更好的解决方案,也许是减少复制

我希望看到一个带有CopyFromScreen的解决方案,它可能只使用1x1位图大小,但需要一个图形。。因此,我们希望有一个替代方案

或者直接访问控件像素的控件

注1:我想从面板上抓取颜色!不是从picturebox,也不是从屏幕。。 注2:对于我的项目,速度并不重要,因为我想创建一个滴管工具。但是,快速的方式也是受欢迎的;谁知道我下一步要去哪里

我的解决方案:

public Color getColor(Control ctl, Point location)
{
   Bitmap bmp = new Bitmap(ctl.Width, ctl.Height);
   ctl.DrawToBitmap(bmp, new Rectangle(0, 0, ctl.Width, ctl.Height));
   Color col = bmp.GetPixel(location.X, location.Y);
   bmp.Dispose();
   return col;
}
我在colorsPanel_MouseClick事件中这样使用它:

       myPen = new Pen(getColor(colorsPanel, e.Location), myStrokeWidth);

我提出了一个使用CopyFromScreen的版本,如下所示:

public Color getScrColor(Control ctl, Point location)
{
   Bitmap bmp = new Bitmap(1, 1);
   Graphics g = Graphics.FromImage(bmp);
   Point screenP = ctl.PointToScreen(location);
   g.CopyFromScreen(screenP.X, screenP.Y, 0, 0, new Size(1, 1));
   Color col = bmp.GetPixel(0, 0);
   bmp.Dispose();
   return col;
}
它也可以正常工作,但似乎比使用DrawToBitmap的要慢很多(10倍)。我怀疑PointToScreen是否是原因,它是一个测试版本,每次交付图形而不创建图形的速度也一样慢

所以我猜CopyFromScreen调用要慢得多,以至于像素的数量并不重要。嗯,可能在合理的范围内。我的调色板控件约为60x400像素

所以目前我想原始的GetColor解决方案是可以使用的