Hallo Community,
ich arbeite mich momentant durch die Lazyfoo Tutorialreihe zu SDL_2 durch und habe mir als Ziel gesetzt, eine Funktion zu schreiben, welche eine Datei in falscher Größe zuerst auf das gesamte Fenster streckt und dieses gestreckte Bild anschließend optimiert, indem es dieses auf das Format des Fensters konvertiert.
Leider bekomme ich von der SDL_BlitScaled Funktion nur einen Nullptr. Hier ist die genaue Fehlermeldung:
sdl_upperblit passed a null surface
Hier die Funktion:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
SDL_Surface* loadBMPandResize(const std::string& dataPath, const SDL_Surface* const mainWindowSurface)
{
SDL_Rect tempRect;
SDL_Surface* tempSurface = NULL;
SDL_Surface* tempSurface_2 = NULL;
SDL_Surface* optimizedTempSurface_2 = NULL;
// Ein Rechteck in der Größe des gesamten Fensters erstellen
tempRect.x = 0;
tempRect.y = 0;
tempRect.h = SCREEN_HEIGHT;
tempRect.w = SCREEN_WIDTH;
// Laden der BMP Datei vom übergebenen Datenpfad (Das Laden der Datei ist erfolgreich)
tempSurface = SDL_LoadBMP(dataPath.c_str());
if (tempSurface == NULL)
{
std::cout << "Laden der Datei in die Surface ist fehlgeschlagen. SDL_Error:\n" << SDL_GetError() << std::endl;
}
else
{
// Skalierung der Datei auf die Größe des Rechtecks sowie die übergabe des skalierten Rechtecks an tempSurface_2
SDL_BlitScaled(tempSurface, NULL, tempSurface_2, &tempRect);
// Speicherfreigabe von tempSurface, da das skalierte Bild nun in tempSurface_2 gespeichert sein sollte
SDL_FreeSurface(tempSurface);
tempSurface = NULL;
// tempSurface_2 ist immer noch ein nullptr, denn hier tritt der Fehler auf.
if (tempSurface_2 == NULL)
{
std::cout << "Skalierung der Datei fehlgeschlagen. SDL_Error:\n" << SDL_GetError() << std::endl;
}
// Dieser Teil des Codes soll anschließend die skalierte Datei optimieren, indem es dieses auf das Format des Fensters konvertiert
else
{
optimizedTempSurface_2 = SDL_ConvertSurface(tempSurface_2, mainWindowSurface->format, NULL);
SDL_FreeSurface(tempSurface_2);
tempSurface_2 = NULL;
if (optimizedTempSurface_2 == NULL)
{
std::cout << "Optimierung der Datei fehlgeschlagen. SDL_Error:\n" << SDL_GetError() << std::endl;
}
}
}
return optimizedTempSurface_2;
}
|
Ich glaube, dass ich hier etwas schrecklich offensichtliches übersehen habe
.
Ich hoffe jemand kann mir erklären, was dort falsch läuft und wie ich das am besten beheben kann.
Lg und viele Dank für eure Zeit