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