缩放 SDL 表面的正确方法是什么?我在网上找到了一种解释,但它需要逐个像素地重绘 Surface。似乎应该有某种方式通过 SDL 本地执行此操作,而不是像那样重绘图像。我无法在涵盖此内容的 SDL 文档中找到任何内容。我可以通过修改曲面的宽度和高度来毫无问题地调整曲面的大小,但生成的曲面会被剪裁。
s13james
问问题
7632 次
3 回答
7
SDL 不支持缩放位图。根据SDL_BlitSurface的文档:
注意:SDL blitter (还)不具备像其他更复杂的 blitting 机制那样向上或向下缩放 blitted 表面的能力。如果你想缩放图像(例如使用 SDL_gfx),你必须自己想办法。
您可以在此处找到 SDL_gfx 。编写自己的 blitting 函数并没有那么糟糕,它可能是一个有趣且有用的学习实验(尽管你会重新发明轮子)。使用 OpenGL 也是一种选择,因为像缩放和旋转这样的东西可以在一个函数调用中完成。
于 2008-11-30T06:09:29.497 回答
1
为了完整起见,并且由于问题未指定 SDL 版本,因此可以在 SDL2 中使用 API 方法进行缩放SDL_RenderCopyEx
。除了基本的 SDL2 库之外,不需要其他库。
int SDL_RenderCopyEx(SDL_Renderer* renderer,
SDL_Texture* texture,
const SDL_Rect* srcrect,
const SDL_Rect* dstrect,
const double angle,
const SDL_Point* center,
const SDL_RendererFlip flip)
通过设置一个的大小dstrect
可以将纹理缩放到整数个像素。也可以同时旋转和翻转纹理。
从技术上讲,这不是缩放表面,而是缩放纹理。尽管在基于 SDL2 的应用程序中进行渲染之前,表面几乎总是被转换为纹理,但该过程应该是相关的。
参考:https ://wiki.libsdl.org/SDL_RenderCopyEx
像往常一样创建你的纹理:
surface = IMG_Load(filePath);
texture = SDL_CreateTextureFromSurface(renderer, surface);
当需要渲染它时,调用SDL_RenderCopyEx
而不是SDL_RenderCopy
于 2015-02-17T10:54:13.517 回答