C# 获取点处的画布颜色

C# 获取点处的画布颜色,c#,wpf,C#,Wpf,让我先解释一下我想做什么。 我正在尝试创建一个颜色选择器控件,如右侧的其中一个控件: 然而,我想自己创造它来学习 目前,我已经在xaml中做了一些布局,我使用了带有LinearGradientBrush背景的画布。现在,当我试图决定哪种颜色是在特定点时,我被卡住了。有什么好办法找到这个吗?。。我想在我的画布上单击并获取该特定点的ARGB。任何帮助都将不胜感激。我找到了解决方案!如果有人需要,就在这里 [DllImport("gdi32")] private static extern int G

让我先解释一下我想做什么。 我正在尝试创建一个颜色选择器控件,如右侧的其中一个控件: 然而,我想自己创造它来学习


目前,我已经在xaml中做了一些布局,我使用了带有LinearGradientBrush背景的画布。现在,当我试图决定哪种颜色是在特定点时,我被卡住了。有什么好办法找到这个吗?。。我想在我的画布上单击并获取该特定点的ARGB。任何帮助都将不胜感激。

我找到了解决方案!如果有人需要,就在这里

[DllImport("gdi32")]
private static extern int GetPixel(int hdc, int nXPos, int nYPos);

[DllImport("user32")]
private static extern int GetWindowDC(int hwnd);

[DllImport("user32")]
private static extern int ReleaseDC(int hWnd, int hDC);

private static SolidColorBrush GetPixelColor(Point point)
{
    int lDC = GetWindowDC(0);
    int intColor = GetPixel(lDC, (int)point.X, (int)point.Y);

    // Release the DC after getting the Color.
    ReleaseDC(0, lDC);

    byte a = (byte)( ( intColor >> 0x18 ) & 0xffL );
    byte b = (byte)((intColor >> 0x10) & 0xffL);
    byte g = (byte)((intColor >> 8) & 0xffL);
    byte r = (byte)(intColor & 0xffL);
    Color color = Color.FromRgb(r, g, b);
    return new SolidColorBrush(color);
}
我这样称呼这个方法:

SolidColorBrush solidcolor = GetPixelColor(RightColorPanel.PointToScreen(point));

Color color = Color.FromArgb(solidcolor.Color.A,
                             solidcolor.Color.R,
                             solidcolor.Color.G,
                             solidcolor.Color.B);

LinearGradientBrush brush = new LinearGradientBrush();
brush.StartPoint = new Point(0, 0);
brush.EndPoint = new Point(1, 0);
brush.GradientStops.Add(new GradientStop(Colors.White, 0.0));
brush.GradientStops.Add(new GradientStop(color, 1));

MainColorPanel.Background = brush;
其中,
point
是我的
RightColorPanel
的特定点,我保持我的颜色! 这真是太棒了