嗨,我想知道是否可以使用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()
获得这些值)。