如何在C和SDL中拉伸位图?

时间:2010-03-07 05:57:01

标签: c bitmap sdl sprite

我正在为我的CS课程制作游戏,我在网上发现的精灵太小了。你如何'拉伸'位图...使用SDL让它们更大? (我需要增加50%的大小,大小相同。)一段示例代码将不胜感激。

4 个答案:

答案 0 :(得分:1)

这个问题并未指定SDL版本,即使在编写问题时SDL2不可用,我相信SDL2答案会增加完整性。

与SDL1.2不同,可以使用API​​方法SDL_RenderCopyEx在SDL2中进行缩放。除了基本的SDL2 lib之外,不需要额外的库。

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的大小,可以将纹理缩放为整数个像素。也可以同时旋转和翻转纹理。

参考:https://wiki.libsdl.org/SDL_RenderCopyEx

像往常一样创建纹理:

surface = IMG_Load(filePath);
texture = SDL_CreateTextureFromSurface(renderer, surface);

现在是时候渲染它了,请拨打SDL_RenderCopyEx而不是SDL_RenderCopy

答案 1 :(得分:0)

使用专为此任务设计的软件,您将获得更好看的结果。一个很好的选择是ImageMagick。它可以从命令行或以编程方式使用。

例如,从命令行输入:

convert sprite.bmp -resize 150% bigsprite.bmp

如果由于一些奇怪的原因你想编写自己的双线性调整大小,this guy looks like he knows what he is doing.

答案 2 :(得分:-1)

你尝试过吗?

    SDL_Rect src, dest;
    src.x = 0;
    src.y = 0;
    src.w = image->w;
    src.h = image->h;
    dest.x = 100;
    dest.y = 100;
    dest.w = image->w*1.5;
    dest.h = image->h*1.5;
    SDL_BlitSurface(image, &src, screen, &dest);

答案 3 :(得分:-1)

用于拉伸SDL的未记录功能: extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src,SDL_Rect * srcrect,                                     SDL_Surface * dst,SDL_Rect * dstrect);

像:

SDL_SoftStretch(图片,& src,屏幕和& dest);