1

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

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);
4

1 回答 1

4

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

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

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

  1. 惯用的、干净的方式;将您的场景渲染到 RenderTarget2D 对象,以便您可以对其内容进行采样,然后使用 SpriteBatch 绘制操作将该 RenderTarget2D 对象blit到后台缓冲区。

  2. 快速而肮脏的方式;调用ScreenManager.GraphicsDevice.GetBackBufferData直接访问后台缓冲区。如果您需要经常执行此采样,那么这很可能不是您的最佳选择,因为它非常慢。(并且可能会阻止您的渲染操作)

于 2013-03-19T06:08:49.600 回答