我如何使用c#获得X,Y像素的颜色?

我如何使用c#获得X,Y像素的颜色?

至于结果,我可以将结果转换为我需要的颜色格式。 我相信有一个API调用这个。

“对于显示器上的任何给定的X,Y,我想获得该像素的颜色。”

屏幕上获取像素颜色,这里是来自Pinvoke.net的代码:

using System; using System.Drawing; using System.Runtime.InteropServices; sealed class Win32 { [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; } } 

有一个图像的Bitmap.GetPixel …是你在做什么? 如果不是的话,你能说出你认为哪个x,y值吗? 在控制?

请注意,如果您确实需要图像,并且想获得大量像素,并且您不介意处理不安全的代码,那么Bitmap.LockBits将比大量调用GetPixel更快。

除了P / Invoke解决scheme之外,还可以使用Graphics.CopyFromScreen将屏幕上的图像数据转换为Graphics对象。 如果你不担心可移植性,我会推荐P / Invoke解决scheme。

对于WPF中的ref:(使用PointToScreen)

  System.Windows.Point position = Mouse.GetPosition(lightningChartUltimate1); if (lightningChartUltimate1.ViewXY.IsMouseOverGraphArea((int)position.X, (int)position.Y)) { System.Windows.Point positionScreen = lightningChartUltimate1.PointToScreen(position); Color color = WindowHelper.GetPixelColor((int)positionScreen.X, (int)positionScreen.Y); Debug.Print(color.ToString()); ... ... public class WindowHelper { // ****************************************************************** [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.Windows.Media.Color GetPixelColor(int x, int y) { IntPtr hdc = GetDC(IntPtr.Zero); uint pixel = GetPixel(hdc, x, y); ReleaseDC(IntPtr.Zero, hdc); Color color = Color.FromRgb( (byte)(pixel & 0x000000FF), (byte)((pixel & 0x0000FF00) >> 8), (byte)((pixel & 0x00FF0000) >> 16)); return color; }