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