Estoy aprendiendo SDL 2.0 en este momento y he visto este método para cargar BMP:
SDL_Texture* LoadImage(std::string file)
{
SDL_Surface *loadedImage = nullptr;
SDL_Texture *texture = nullptr;
loadedImage = SDL_LoadBMP(file.c_str());
if (loadedImage != nullptr)
{
texture = SDL_CreateTextureFromSurface(renderer, loadedImage);
SDL_FreeSurface(loadedImage);
}
else
std::cout << SDL_GetError() << std::endl;
return texture;
}
¿Cómo podría cambiarlo para cargar archivos PNG?
EDITAR: Woops, olvidé agregar mi método de carga de PNG.
SDL_Texture* grass_image = nullptr;
grass_image = IMG_LoadTexture(renderer, "res/grass.bmp");
SDL_Rect grass_rect;
grass_rect.x = 0;
grass_rect.y = 0;
grass_rect.w = SCREEN_WIDTH;
grass_rect.h = SCREEN_HEIGHT;
if (grass_image == NULL)
std::cout << "Couldn't load grass_image" << std::endl;
while (!quit && mainEvent -> type != SDL_Quit)
{
SDL_RenderCopy(renderer, grass_image, NULL, &grass_rect);
}
Simplemente no quiero tener que hacer eso para CADA imagen. Entonces, ¿cómo podría poner eso en una función?
¡Gracias!
Respuestas:
Debe usar SDL_Image API, tiene una función simple que carga todo:
Más precisamente, carga ICO (Icon) / CUR (Cursor) / BMP, PNM (PPM / PGM / PBM), XPM, LBM (IFF ILBM), PCX, GIF, JPEG, PNG, TGA, TIFF y XV. .
También tiene funciones de formato individual como
IMG_isPNG
yIMG_LoadPNG_RW
.Creo que esta lib es una de las más utilizadas para cargar archivos de imágenes con SDL.
Sitio web y documentación
fuente
Para cargar archivos PNG con SDL, debe tener la extensión de biblioteca SDL_Image.
http://www.libsdl.org/projects/SDL_image
Una descripción de esta extensión de biblioteca:
"SDL_image es una biblioteca de carga de archivos de imagen. Carga imágenes como superficies SDL y admite los siguientes formatos: BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, WEBP, XCF, XPM, XV".
fuente
SDL 2 SDL_image ejemplo ejecutable mínimo
C Principal
GitHub aguas arriba .
Compilar y ejecutar:
Salir:
Probado en Ubuntu 16.04, GCC 6.4.0, SDL 2.0.4, SDL Image 2.0.1.
fuente
IMG_LoadTexture()
.