2017-07-24 2 views
1

Hey, ich wollte ein Bild mit SDL2 in mein Programm laden. Ich bin mit Visual Studio 2015. Ich stelle das Bild in meinem Projektordner in der richtigen Stelle, aber immer noch Bild ist nicht loaded.my Code alsEin Bild konnte nicht in das SDL2-Programm geladen werden

#include <iostream> 
#include <SDL_image.h> 
#include <SDL.h> 

using namespace std; 

int main(int argc, char* argv[]) { 

    SDL_Init(SDL_INIT_VIDEO); 
    SDL_Window* window = NULL; 

    window = SDL_CreateWindow("Game", 100, 100, 700, 400, SDL_WINDOW_SHOWN); 

    if (window = NULL) { 
     cout << "Window creation error" << endl; 
    } 

    SDL_Renderer* renderer = NULL; 
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); 
    SDL_Texture* man = IMG_LoadTexture(renderer, "img.png"); 
    SDL_Event* ev = new SDL_Event(); 

    if (man == NULL) { 
     cout << "image cannot load" << endl; 
    } 

    SDL_Rect boy_rect; 
    boy_rect.x = 10; 
    boy_rect.y = 10; 
    boy_rect.h = 220; 
    boy_rect.w = 300; 

    while (ev->type != SDL_QUIT) { 
     SDL_PollEvent(ev); 
     SDL_RenderClear(renderer); 

     SDL_RenderCopy(renderer, man, NULL, &boy_rect); 

     SDL_RenderPresent(renderer); 
    } 
    SDL_DestroyTexture(man); 
    SDL_DestroyWindow(window); 
    SDL_DestroyRenderer(renderer); 

    return 0; 
} 

das Ergebnis folgt, wird „Bild kippt load“ Ich kann nicht finden jede Fehler davon, wenn Sie finden können, bitte informieren Sie mich. danke

+0

Sind Sie sicher, dass der Renderer korrekt erstellt wurde? Wo hast du das Bild platziert? –

+0

Ich lege das Bild, wo diese C++ Datei platziert –

+0

@JayamalJayamaha Sie müssen das Bild, wo das kompilierte Programm ist (oder im Allgemeinen im Arbeitsverzeichnis), nicht wo die '.cpp' Datei ist. Denken Sie daran, es ist die Binärdatei, die ausgeführt wird, nicht die Quelle. – hnefatl

Antwort

3

Der Fehler, den Sie vorschlagen, man ist null, was bedeutet, IMG_LoadTexture gab null zurück. Dies kann daran liegen, dass renderer null ist, was Sie überprüfen sollten, oder wahrscheinlich, weil Ihr "img.png" nicht von der SDL_IMG-Bibliothek gefunden werden kann.

Sie sollten zuerst eine Überprüfung hinzufügen, um sicherzustellen, dass Ihr Renderer nicht null ist, und dann die working directory überprüfen, von der Ihr Programm ausgehen soll (vorausgesetzt, es läuft von einer IDE aus). Die Datei "img.png" muss sich in diesem Verzeichnis befinden. Am einfachsten ist es, das Arbeitsverzeichnis in dasselbe Verzeichnis zu ändern, in dem sich die kompilierte Binärdatei befindet, sodass sich Programm und Daten an derselben Stelle befinden.

Sie können IMG_GetError (oder SDL_GetError) anrufen, um eine Zeichenfolge zu erhalten, die den Fehler beschreibt - dies sollte Ihre erste Anlaufstelle sein, wenn etwas in einem SDL-Programm beginnt, sich zu verhalten.

Bearbeiten: Eine andere Sache, die schief gehen könnte ist, dass die SDL-Link-Bibliotheken nicht im selben Ordner wie Ihre Binärdatei befinden (obwohl dies eher zum Absturz). Du brauchst z. SDL2.a, SDL2_image.a, wahrscheinlich aus dem lib oder bin Verzeichnis des Archivs, das Sie mit den SDL-Headern heruntergeladen haben. Wenn Sie das Ergebnis der oben genannten Prozeduraufrufe erhalten, können Sie feststellen, ob dies der Fall ist.

0

Auf einigen IDEs und OSs wie meine sollten Sie die komplette (absoluten) Pfad verwenden wie:

"C: //Users/Filomena/Documents/Images/Sprite.png"

C++ IMG_LoadTexture() returns null

+0

'IMG_LoadTexture' ist ein korrekter Aufruf in SDL2 (Tag in OP's Post). Es lädt nur eine 'Surface' mit' IMG_Load' und verwendet 'SDL_CreateTextureFromSurface', um es zu konvertieren ([siehe hier] (https://github.com/davidsiaw/SDL2_image/blob/d22cb09aa8ae01498bc683efa3e6d9f6a4515d60/IMG.c#L207-L216)) . Ich bin neugierig - was ist ein "SO"? Ich kann mir nicht vorstellen, wofür es im Kontext der Quelleditoren stehen könnte. – hnefatl

+0

Tut mir leid, yeah du warst richtig 'IMG_LoadTexture' ist eine korrekte Funktion von SDL_Image.h, also habe ich meine Antwort bearbeitet, übrigens, hast du versucht den absoluten Pfad zu benutzen? Ich habe einen Link eingefügt, der meiner Antwort entspricht. –

+0

Absolute Pfade sind in der Regel schlechte Nachrichten (warum habe ich sie nicht erwähnt) - relative Pfade sind immer nachhaltiger, und das OP sollte in der Lage sein, es mit ihnen arbeiten zu lassen (wie in, SDL_Image unterstützt sie). – hnefatl

Verwandte Themen