我正在使用以下代码来获取屏幕上特定像素的颜色,但由于某种原因,它总是返回黑色。这是我正在使用的代码:
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);
答案 0 :(得分:4)
您的问题是您的Texture2D对象backBufferData
实际上并未访问后台缓冲区数据。
实例化backBufferData
的行不会检索后台缓冲区内容,只是创建一个与当前视口大小相同的新Texture2D对象。
从XNA 4.0开始,只有两种方法可以将颜色数据渲染到屏幕上:
惯用,干净的方式;将场景渲染为RenderTarget2D对象,以便您可以对其内容进行采样,然后使用SpriteBatch绘制操作将RenderTarget2D对象blit到后台缓冲区。
快速而肮脏的方式;调用ScreenManager.GraphicsDevice.GetBackBufferData直接访问后台缓冲区。如果您需要经常进行此采样,那么这很可能不是您的最佳选择,因为它非常慢。 (并可能阻止渲染操作)