C# 如何读取XNA中特定像素的颜色?

C# 如何读取XNA中特定像素的颜色?,c#,colors,xna,coordinates,pixel,C#,Colors,Xna,Coordinates,Pixel,我想要一种方法来确定,例如,游戏窗口中Vector2(2,5)处的像素是否为color.Red或其他颜色或坐标集。如何实现这一点?将纹理转换为数组,然后根据坐标找到指定的像素并获得颜色。示例可在网页上找到 您应该首先将图形设备的backbuffer(使用GraphicsDevice.GetBackBufferData())读取到纹理中,然后按照上述方法检查纹理。您可以使用与每像素碰撞相同的方法。获取纹理的颜色数据并循环检查这些像素与其他纹理像素。你只需要稍微修改一下就可以得到它,这样你就可以使用

我想要一种方法来确定,例如,游戏窗口中Vector2(2,5)处的像素是否为color.Red或其他颜色或坐标集。如何实现这一点?

将纹理转换为数组,然后根据坐标找到指定的像素并获得颜色。示例可在网页上找到


您应该首先将图形设备的backbuffer(使用
GraphicsDevice.GetBackBufferData()
)读取到纹理中,然后按照上述方法检查纹理。

您可以使用与每像素碰撞相同的方法。获取纹理的颜色数据并循环检查这些像素与其他纹理像素。你只需要稍微修改一下就可以得到它,这样你就可以使用坐标来获得特定的颜色数据。基本上,颜色或颜色以特定顺序存储在数组中。然后,您只需要计算纹理的x和y位置以及要加载正确像素的矢量2。还请注意,如果使用缩放纹理,则需要使用矩阵来获得正确的像素。我知道如何从纹理等获取数据,但我要做的是在游戏窗口中获取特定像素的颜色,而不是从纹理中获取。此时,你必须找出所有纹理。然后你可以从上面提到的纹理中得到颜色。只是出于好奇,这个方法会返回十六进制值颜色吗?不会,但是你可以从颜色中去掉(a)rgb值<代码>颜色。r.toString(“x2”)将为您提供十六进制值或红色。所以加入“r”“g”“b”会给你六个颜色代码。
private Color[,] TextureTo2DArray(Texture2D texture)
{
    Color[] colors1D = new Color[texture.Width * texture.Height];
    texture.GetData(colors1D);
    Color[,] colors2D = new Color[texture.Width, texture.Height];
    for (int x = 0; x < texture.Width; x++)
    {
        for (int y = 0; y < texture.Height; y++)
        {
            colors2D[x, y] = colors1D[x + y * texture.Width]; 
        }
    }
    return colors2D;
}
public static string ToHex(this Color color, bool includeHash)
{
    string[] argb = {
        color.A.ToString("X2"),
        color.R.ToString("X2"),
        color.G.ToString("X2"),
        color.B.ToString("X2"),
    };
    return (includeHash ? "#" : string.Empty) + string.Join(string.Empty, argb);
}