2013-03-18 66 views
1

我使用下面的代码来获取屏幕上特定像素的颜色,但由于某种原因它总是返回黑色。这是我使用的代码:Texture2D.GetData <Color>总是返回黑色

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

你的问题是,你的Texture2D对象backBufferData没有实际访问后台缓存数据。

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

由于XNA 4.0,只有两种方法可以渲染到屏幕的颜色数据:

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

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

+0

+1对于良好的评论和用户名。 – 2013-03-19 09:26:24

+3

我认为很显然Mitchell和Webb全权负责所有堆叠声望的提高。 – 2013-03-19 09:31:12

+0

我这样做的原因是,我在地图上随机生成一个点,如果该点落在海中,我将重新生成一个点,所以我认为第二个选项就足够了。谢谢!伟大的用户名btw。 – 2013-03-19 10:28:37