2014-05-10 117 views
1

讓我先解釋一下我正在嘗試做什麼。 我想創建一個顏色選擇器控件,如右側的其中一個:http://demos.telerik.com/silverlight/Themesgenerator/ 但是我想自己創建一個用於學習的控件。在點上獲取畫布顏色

目前我已經在xaml中做了某種佈局,並且我使用了帶有LinearGradientBrush背景的Canvas。現在,我試圖決定哪個顏色是在特定點上時卡住了。有沒有什麼好的方法來找到這個?..我想點擊我的畫布並獲得該特定點的ARGB。任何幫助,將不勝感激。

回答

2

我找到了解決方案!這裏如果有人需要它!

[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,我讓我的顏色在具體點! 這個作品真的很棒!