Ich lerne gerade SDL 2.0 und habe diese Methode zum Laden von BMPs gesehen:
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;
}
Wie könnte ich es hochschalten, um PNG-Dateien zu laden?
EDIT: Woops, habe vergessen, meine Methode zum Laden von PNGs hinzuzufügen.
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);
}
Ich möchte das einfach nicht für JEDES Bild tun müssen. Wie könnte ich das in eine Funktion umsetzen?
Vielen Dank!
Antworten:
Sie sollten die SDL_Image-API verwenden. Sie verfügt über eine einfache Funktion, die alles lädt:
Genauer gesagt werden ICO- (Symbol) / CUR- (Cursor) / BMP-, PNM- (PPM / PGM / PBM), XPM-, LBM- (IFF ILBM), PCX-, GIF-, JPEG-, PNG-, TGA-, TIFF- und XV-Miniaturbildformate geladen .
Es hat auch individuelle Formatfunktionen wie
IMG_isPNG
undIMG_LoadPNG_RW
.Diese Bibliothek ist eine der am häufigsten verwendeten zum Laden von Bilddateien mit SDL, denke ich.
Website und Dokumentation
quelle
Um PNG-Dateien mit SDL laden zu können, benötigen Sie die Bibliothekserweiterung SDL_Image.
http://www.libsdl.org/projects/SDL_image
Eine Beschreibung dieser Bibliothekserweiterung:
"SDL_image ist eine Bibliothek zum Laden von Bilddateien. Sie lädt Bilder als SDL-Oberflächen und unterstützt die folgenden Formate: BMP, GIF, JPEG, LBM, PCX, PNG, PNM, TGA, TIFF, WEBP, XCF, XPM, XV."
quelle
SDL 2 SDL_image minimales ausführbares Beispiel
Haupt c
GitHub stromaufwärts .
Kompilieren und ausführen:
Ergebnis:
Getestet unter Ubuntu 16.04, GCC 6.4.0, SDL 2.0.4, SDL Image 2.0.1.
quelle
IMG_LoadTexture()
.