Texture2D.GetData <color>始终返回黑色</color>

时间:2013-03-18 22:21:54

标签: c# windows-phone-7 xna

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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