I’d like to implement the take screenshots feature.
From previous discussion forum I’ve found that there are TakeScreenShot and SavePNG functions, but I didn’t find the way to use them.
[SOLVED] Taking screenshots


Its pretty simple, the docs are useful for working things out for functions like these.
Image screenshot(context_);
GetSubsystem<Graphics>()->TakeScreenShot(screenshot);
screenshot->SavePNG(path/to/dest/file.png);

Thanks for reply, I’m still missing something, I can’t get it to work in script.
EDIT: many thanks to JTippetts for exposing Image constructor to lua

It’s something I’ve been meaning to do for awhile, but this thread reminded me. I use a custom executable and until this change, I have been taking screenshots inside the .exe in response to a custom event. Having Image exposed to Lua makes it so much easier.

Everything works fine for script (angel and lua).
But for C++, I get this error for screenshot->SavePNG(…):
error: base operand of ‘->’ has non-pointer type ‘Urho3D::Image’

When the image is a locally constructed object instead of pointer to image, you need to use . instead of ->

When I try to resize the image before saving it, the image file it produces is screwed up (grey image).
screenshot.SetSize(160, 90, screenshot.GetComponents());
Am I missing something?

SetSize() destroys the existing data. There is currently no function to arbitrarily resample an image to a new size.

If anyone would like the functionality we have a bilinear interpolating and nearest-neighbour scaling function we added as a utility but could fold into the image class.

I’m sure that would be appreciated, and should fit well into the Image class.

Yes, that would be great!