1、XML文件
<Window x:Class="WPFPickColor.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPFPickColor"
mc:Ignorable="d"
Title="MainWindow" Height="800" Width="800">
<Grid Margin="15">
<Grid.RowDefinitions>
<RowDefinition Height="60"/>
<RowDefinition/>
<RowDefinition Height="200"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<TextBlock Text="文件:" Margin="20 20"></TextBlock>
<TextBox Grid.Column="1" Height="30" Name="tbImageFilePathName" VerticalContentAlignment="Center"></TextBox>
<Button Grid.Column="2" Width="80" Height="30" Margin="10" Content="打开" Name="OpenImageFile" Click="OpenImageFile_Click"></Button>
</Grid>
<Border Grid.Row="1" BorderBrush="Black" BorderThickness="2" Background="Transparent">
<Image Source="123333.png" MouseLeftButtonDown="Image_MouseLeftButtonDown" Name="ImagesName" Stretch="Fill"></Image>
</Border>
<Border BorderThickness="1" BorderBrush="Orange" Grid.Row="2" Margin="10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<GroupBox Header="ARGB" Margin="10" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="A" Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
<TextBox Height="20" Width="100" Grid.Row="0" Grid.Column="1" x:Name="tbAName"></TextBox>
<TextBlock Text="R" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
<TextBox Height="20" Width="100" Grid.Row="1" Grid.Column="1" x:Name="tbRName"></TextBox>
<TextBlock Text="G" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
<TextBox Height="20" Width="100" Grid.Row="2" Grid.Column="1" x:Name="tbGName"></TextBox>
<TextBlock Text="B" Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Center"></TextBlock>
<TextBox Height="20" Width="100" Grid.Row="3" Grid.Column="1" x:Name="tbBName"></TextBox>
</Grid>
</GroupBox>
<GroupBox Header="Hue Hex" Grid.Column="1" Margin="10">
<Grid >
<TextBox Height="30" VerticalAlignment="Center" VerticalContentAlignment="Center" FontSize="21" Margin="5" Name="tbHueHexName"> </TextBox>
</Grid>
</GroupBox>
<GroupBox Header="色块" Grid.Column="2" Margin="10">
<Border BorderThickness="1" BorderBrush="Black" x:Name="borderColorName">
</Border>
</GroupBox>
</Grid>
</Border>
</Grid>
</Window>
2、创建一个类Win32APIHelper文件
class Win32APIHelper
{
[DllImport("user32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("user32.dll")]
static extern Int32 ReleaseDC(IntPtr hwnd, IntPtr hdc);
[DllImport("gdi32.dll")]
static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
static public System.Drawing.Color GetPixelColor(int x, int y)
{
IntPtr hdc = GetDC(IntPtr.Zero);
uint pixel = GetPixel(hdc, x, y);
ReleaseDC(IntPtr.Zero, hdc);
Color color = Color.FromArgb((int)(pixel & 0x000000FF),
(int)(pixel & 0x0000FF00) >> 8,
(int)(pixel & 0x00FF0000) >> 16);
return color;
}
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
public int X;
public int Y;
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool GetCursorPos(out POINT pt);
}
3、Mainwindow.xaml.cs使用
private void Image_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point p = e.GetPosition(ImagesName);
Console.WriteLine("GetPosition: " + p.X + " - " + p.Y);
Win32APIHelper.POINT pOINT = new Win32APIHelper.POINT();
Win32APIHelper.GetCursorPos(out pOINT);
System.Drawing.Color color = Win32APIHelper.GetPixelColor((int)pOINT.X, (int)pOINT.Y);
Console.WriteLine("GetCursorPos: " + pOINT.X + " - " + pOINT.Y);
Console.WriteLine(color.ToString());
tbAName.Text = color.A.ToString();
tbRName.Text = color.R.ToString();
tbGName.Text = color.G.ToString();
tbBName.Text = color.B.ToString();
tbHueHexName.Text = "#" + color.A.ToString("X2") + color.R.ToString("X2") + color.G.ToString("X2") + color.B.ToString("X2");
borderColorName.Background = new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B)); ;
}
private void OpenImageFile_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择文件";
openFileDialog.Filter = "jpg文件|*.jpg|png文件|*.png|所有文件|*.*";
openFileDialog.FileName = string.Empty;
openFileDialog.FilterIndex = 1;
openFileDialog.RestoreDirectory = true;
openFileDialog.DefaultExt = "jpg";
DialogResult result = openFileDialog.ShowDialog();
if (result == System.Windows.Forms.DialogResult.Cancel)
{
return;
}
string fileName = openFileDialog.FileName;
this.tbImageFilePathName.Text = fileName;
ImagesName.Source = new BitmapImage(new Uri(fileName));
}