usar para necesarios library elementos dibujar crear c# api

library - elementos necesarios para dibujar un pixel en c#



¿Cómo obtengo el color de un píxel en X, Y usando c#? (4)

¿Cómo obtengo el color de un píxel en X, Y usando c #?

En cuanto al resultado, puedo convertir los resultados al formato de color que necesito. Estoy seguro de que hay una llamada API para esto.

"Para cualquier X, Y del monitor, quiero obtener el color de ese píxel".


Además de la solución P / Invoke, puede usar Graphics.CopyFromScreen para obtener los datos de imagen de la pantalla en un objeto Graphics. Si no está preocupado por la portabilidad, sin embargo, recomendaría la solución P / Invoke.


Hay Bitmap.GetPixel para una imagen ... ¿es eso lo que buscas? Si no, ¿podría decir a qué valor x, y quiere decir? En un control?

Tenga en cuenta que si se refiere a una imagen, y quiere obtener muchos píxeles, y no le molesta trabajar con código inseguro, entonces Bitmap.LockBits será mucho más rápido que muchas llamadas a GetPixel .


Para obtener un color de píxel de la pantalla, aquí está el código de 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; } }


Para ref en WPF: (uso de 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; }