我正在使用以下代码来获取屏幕上特定像素的颜色,但是由于某种原因,它总是返回黑色。这是我正在使用的代码:

Rectangle pixel = new Rectangle((int)screenPosition.X, (int)screenPosition.Y, 1, 1);
                        Texture2D backBufferData = new Texture2D(ScreenManager.GraphicsDevice, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferWidth, ScreenManager.GraphicsDevice.PresentationParameters.BackBufferHeight);
                        Color[] waterPixel = new Color[1];
                        backBufferData.GetData<Color>(0, pixel, waterPixel, 0, 1);

最佳答案

您的问题是您的Texture2D对象backBufferData实际上没有访问后台缓冲区数据。

实例化backBufferData的行不会检索后台缓冲区的内容,而只是创建一个新的Texture2D对象,该对象的大小与当前视口的大小相同。

从XNA 4.0开始,只有两种方法可以将颜色数据呈现到屏幕上:


惯用的,干净的方式;将场景渲染到RenderTarget2D对象,以便可以对其内容进行采样,然后使用SpriteBatch绘制操作将该RenderTarget2D对象映射到后台缓冲区。
快速而肮脏的方式;调用ScreenManager.GraphicsDevice.GetBackBufferData直接访问后台缓冲区。如果您需要频繁执行此采样,则这很可能不是您的最佳选择,因为它的速度非常慢。 (并可能阻止您的渲染操作)

关于c# - Texture2D.GetData <Color>始终返回黑色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15488076/

10-17 00:11