Probleme mit Uint32



  • Hallo , ich pogramiere gerade ein Spiel in C++ mit SDL 1.2 und Versuche dort folgende Rechnung auszuführen :

    int X = 100;
    int Y = 200;

    Uint32 Nummer = (Y-1)*1280+Y;

    Immer wenn ich versuche auszuführen diese auszuführen kommt eine unbehandelt ausnahme .


  • Mod

    Vollständiges Minimalbeispiel bitte. Siehe Link in meiner Signatur zum Posten des korrekten Codes. Ich wette, bei der Erstellung des Beispiels wird sich heraus stellen, dass es an ganz was anderem liegt.



  • Ok , es soll eine Funktion zum auslesen einer Bitmap werden , welche dann den
    Rot wert des gefragten Pixels ausgibt ,X und Y sind die Koordinaten des gefragten Pixels , *image wurde ganz normal mit SDL_LoadBMP() geladen:

    int Give_Pixel(int X,int Y ,SDL_Surface * image){

    SDL_LockSurface (image);

    Uint32 pixelnummer=(Y-1)*1280+X ;
    SDL_PixelFormat *format = image->format;
    Uint8 r,g,b;
    r = g = b = 0;

    SDL_GetRGB(pixelnummer, format, &r, &g, &b);

    SDL_UnlockSurface (image);

    return r;

    }


  • Mod

    Das ist kein vollständiges Minimalbeispiel 🙄 .



  • Es ist übrigens eine Windows 32 Konsolenaplication .
    Wenn dass nicht als Minimalbeispiel zählt weiss ich auch nicht weiter :

    include<SDL.h>
    include<iostream>

    int Give_Pixel(int X,int Y ,SDL_Surface * image){

    SDL_LockSurface (image);

    Uint32 pixelnummer=(Y-1)*1280+X ;
    SDL_PixelFormat *format = image->format;

    Uint8 r,g,b;
    r = g = b = 0;

    SDL_GetRGB(pixelnummer, format, &r, &g, &b);

    SDL_UnlockSurface (image);

    return r;

    }

    int main(int argc,char* args[])
    {
    int X = 100;
    int Y = 100;
    SDL_Surface *image = SDL_LoadBMP("image.bmp");

    int Red = Give_Pixel (X,Y,image);

    return (0);
    }



  • Was gibt SDL_LoadBMP zurück?



  • Es gibt ein SDL_Surface mit den Inhalt der angegebenen Bitmap zurück


  • Mod

    Welchen Wert gibt SDL_LoadBMP zurück?



  • @Jannes Luehr
    Perfekte Gelegenheit um dich mit dem Debugger vertraut zu machen.
    Starte das Programm im Single-Step Modus, und geh Schritt für Schritt durch. Und guck dir die ganzen Rückgabewerte an. Also den von SDL_LoadBMP, den von SDL_LockSurface usw.
    Dann solltest du sehen wo das Problem liegt.

    Und auch gleich eine gute Gelegenheit um damit anzufangen Code mit Fehlerbehandlung zu schreiben.
    So-gut-wie jeder Funktionsaufruf kann schief gehen (File nicht gefunden -> SDL_LoadBMP schlägt fehl etc.). Und wenn man nicht möchte dass sein Programm in so einem Fall crasht, muss man an sehr vielen Fällen überprüfen ob auch alles funktioniert hat.

    (In C++ verwendet man dazu oft Exceptions, was einem viel Arbeit abnimmt, weil man nicht dauernd "if (schiefgegangen)" schreiben muss. Da SDL aber eine C Bibliothek ist kann sie keine Exceptions verwenden, und du musst das "if (schiefgegangen)" eben wirklich an vielen vielen Stellen selbst hinschreiben.)


Log in to reply