On some platforms you can use the SaveAsPng() method as pointed out in the article cited above. However, the function has not been implemented yet on Windows, so you can use the GraphicsDevice.SetRenderTarget() function and draw the scene again instead. Here is an example how to use it.

BTW, don't forget to manually Dispose() the Texture2D created by the TakeScreenshot() function.

The safest way to deal with this is to wrap the call to TakeScreenshot in a using block and to call the Save method in the using block's body. This way, the Texture2D will always be disposed, regardless of what happens.

This solution does not work to me for new MonoGame releases, because due to this check that was introduced` public void Present() { // We cannot present with a RT set on the device. if (_currentRenderTargetCount != 0) throw new InvalidOperationException("Cannot call Present when a render target is active.");