代码之家  ›  专栏  ›  技术社区  ›  jamesmillerio

在不剪裁的情况下缩放SDL曲面的正确方法?

  •  8
  • jamesmillerio  · 技术社区  · 17 年前

    缩放SDL曲面的正确方法是什么?我在网上找到了一个解释,但它需要一个像素一个像素地重新绘制表面。似乎应该有某种方法通过SDL实现这一点,而不是像那样重新绘制图像。我在SDL文档中找不到任何关于这方面的内容。通过修改曲面的宽度和高度,我可以毫无问题地调整曲面的大小,但生成的曲面会被剪裁。

    3 回复  |  直到 11 年前
        1
  •  8
  •   Justin Stephens    9 年前

    我知道这个答案太晚了,无法帮助提问者,但我决定写这篇文章来帮助任何偶然发现这个问题的人。在SDL2.0中,可以使用 SDL_BlitScaled() 函数将曲面缩放为目标曲面 SDL_Rect . 这里有一篇作者的教程 LazyFoo 哪个描述了这个,或者看看这个 documentation .

        2
  •  7
  •   Firas Assaad    17 年前

    SDL_BlitSurface :

    其他更为复杂的案例 布告机制。你必须 您希望缩放图像(例如使用

    你可以找到SDL_gfx here

        3
  •  1
  •   Martin G    11 年前

    为了完整性,并且因为问题没有指定SDL版本,所以可以使用API方法在SDL2中进行缩放 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

    推荐文章