嗨,我想知道是否可以使用SDL2截屏。
我尝试了SDL_GetWindowSurface,但收到一条错误消息:



我从here中获取了代码。

我想到的另一个解决方案是将纹理转换为表面,但是我没有做到这一点。

你有什么解决办法吗?

最佳答案

似乎您正在混合渲染系统。该方法仅在软件渲染的情况下有效。对于硬件渲染,应使用SDL_RenderReadPixels()方法。要保存屏幕截图,您将需要如下代码:

SDL_Surface *sshot = SDL_CreateRGBSurface(0, w, h, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000);
SDL_RenderReadPixels(renderer, NULL, SDL_PIXELFORMAT_ARGB8888, sshot->pixels, sshot->pitch);
SDL_SaveBMP(sshot, "screenshot.bmp");
SDL_FreeSurface(sshot);

其中 w h 是屏幕的宽度和高度(您可以使用SDL_GetRendererOutputSize()获得这些值)。

09-12 22:11