The reason the screenshot is smaller than the screen is because the TextureRect node that the result of the screenshot is applied to is sized to be smaller than the full screen. In actual pixels, the texture within the TextureRect node is exactly the same size as the game screen, but because the node is smaller it is scaled down.
The reason for this is so you can see the results of hitting the capture screen button. If it was the exact same size as the game screen, nothing would seem to happen when you press the capture screen button.
As for why the capture is flipped by default, this is just how Godot renders Viewport textures by default. If you make a Viewport node, you can enable a option to flip the screen on the Y axis automatically, but in the case of the screen capture demo, it is using the root viewport so the flip on the Y axis has to be done in code (otherwise the game screen would be flipped outside down).
Hopefully this helps! :smile: