在实例中获取像素颜色
本文关键字:像素 颜色 获取 实例 | 更新日期: 2023-09-27 18:31:10
我正在搜索这个网站上的帖子,我遇到了这个:如何使用 c# 获取 X,Y 处像素的颜色?
这种方法对于尝试在表单内获取像素的颜色仍然有效吗?
如果没有,那么在颜色值的 2D 数组中基本上"映射"表单的方法是什么?
例如,我有一个 Tron 游戏,我想检查轻型自行车的下一个位置是否已经包含另一辆轻型自行车。
谢谢伊恩
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;
}
}
使用此功能,您可以执行以下操作:
public static class ControlExts
{
public static Color GetPixelColor(this Control c, int x, int y)
{
var screenCoords = c.PointToScreen(new Point(x, y));
return Win32.GetPixelColor(screenCoords.X, screenCoords.Y);
}
}
因此,在您的情况下,您可以执行以下操作:
var desiredColor = myForm.GetPixelColor(10,10);
您可以使用引用的问题中的方法来从表单中获取像素的颜色,您只需要先确定像素是否在表单的范围内,并且您需要将坐标从表单转换为屏幕坐标,反之亦然。
编辑:经过一番思考,如果有人在表单顶部打开另一个窗口,这将没有好处! 我认为最好找出一种不同的方法......
您可以使用 GetPixel 方法来获取颜色。
例如
从图像文件创建位图对象。位图my位图=新位图("葡萄.jpg");
获取 myBitmap 中像素的颜色。Color pixelColor = myBitmap.GetPixel(50, 50);
这可能是针对不同情况的另一种方法,请单击此处
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;
}
}