在同一表面加载图像是否会释放旧图像?

Does loading an image in the same surface free the old image?

我是 SDL 新手,在我程序的这一部分中,我希望能够更改现有表面的图像。我的问题是,这会自动卸载之前的图像还是我必须使用 SDL_FreeSurface() 然后重新加载表面?我不想加载大量不需要加载的图像。视觉解释:

string path = "Image.png";
SDL_Surface* loadedSurface = IMG_Load((path.c_str());

如果我用不同的图像再次使用 loadedSurface,原始图像会被卸载吗?

path = "NewImage.png";
loadedSurface = IMG_Load(path.c_str());

或者我每次加载新图像时都必须做这样的事情吗:

SDL_FreeSurface(loadedSurface);
path = "NewImage.png";
SDL_Surface* loadedSurface = IMG_Load(path.c_str());

这可能没问题,我只是不确定在每个循环中创建一个新表面是否会比另一种更简单的方法更密集。谢谢!

您需要在加载新表面并覆盖旧指针之前调用 SDL_FreeSurface

想一想:在您第二次调用 IMG_Load 时,SDL 只是在加载图像,并不知道您要对返回的指针做什么。所以它不能释放任何已经加载的表面。你必须自己做。