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;
}