SDL Get und Put Pixel Problem



  • std::cout << "Zeichne string" << endl;
        SDL_Surface* tmp = IMG_Load("74zzieba.png");
        SDL_SetAlpha(tmp,0,0);
        pSur_Font =  SDL_CreateRGBSurface(SDL_HWSURFACE,tmp->w, tmp->h, 32, RMASK, GMASK, BMASK, AMASK);
        SDL_BlitSurface(tmp,0,pSur_Font,0);
    

    Kannst auch das alternativ mal beim laden einfügen, und testen ob das geht (das sollte im Zweifelsfalle in eine 32-bit surface konvertieren wenn aus der bmp keine entsprechende rauskommt)

    Bitte bedenke auch, das der code denn ich hier gepostet hab wegen den fehlenden SDL_FreeSurface befehlen extreme memory leaks hat.



  • Zu dem SDL Image :

    Ich benutze VS express, und hab mir hier : http://www.libsdl.org/projects/SDL_image/
    SDL Image runtergeladen.
    Entahalten war darin nur ein paar header files und eben weitere zip packete für die etsprechenden Compilier (vermute ich mal) Also hab das zip für VS ausgepackt.
    Dann hatte ich in dem SDL_Image verezeichniss ein unterverzeichniss namens VisualC, darin enthalten sind ein paar dateien für VS.

    So nun zu dem Surface:

    Ich habe pSur_Font->format ausgewerten, der wert ist immer anders.
    pSur_Font->format_version ist 3
    pSur_Font->flags ist 0

    Und wie soll er denn SDL_image.lib überhaupt finden, dies Lib sollte doch eig. erstellt werden, oder etwa nicht 😕



  • http://www.libsdl.org/projects/SDL_image/release/SDL_image-devel-1.2.10-VC.zip

    Das ist die datei, die du runterladen musst, enthält header und .lib datei.

    (quelle http://www.libsdl.org/projects/SDL_image/)

    Das interessante bei SDL_Surface->format sind eigentlich BitsPerPixel und BytesPerPixel, sowie die verwendeten masks (rmask, gmask, bmask, amask)

    BitsPerPixel sollte 32, bytes per pixel 4 sein - wenn nicht, hast du da dein problem (wenn auch noch nicht die Lösung)



  • Hey.
    Ich danke dir für deine Mühe.

    Das Problem war, ich hatte das Bild einemal mit 16 und einmal mit 24 byte abgespeichert.

    Demnach hatte die Surface auch nur 16 bzw. 24 byte, weshalb die funk get_pixel bzw. put_pixel nur müll ausgespuckt hat.

    MS Pait gibt mir leider nicht die möglichkeit ein Bild mit 32 byte Farbtiefe abzupeichern.

    Ich habs nun einfach so gemacht, wie du es gepostet hast.

    Auch das laden eines png´s mit IMG_Load funktioniert leider nicht. Der Pointer zeigt ledeider immer auf 0 hmm.

    Naja mal schauen wie cih es mache, ob ich algemein auf 24 bzw. 16 byte Farbtiefe umsteige und mir die funktionien umschreibe oder es so mache wie du es geostet hast, natürlich werde ich dann den speicher auch wieder frei geben ^^

    EDIT:

    Ach ne kleine Frage hab ich noch, wenn ich mittels SDL_SetVideoMode () ne surface erstelle, habe ich ja unter windows ein "normales Fenster", Jedoch läst dich dieses nciht verschieben, hab ich da nen style übersehen, den ich angeben muss? ist das ein Fehler? oder ist das einfach so ?

    mfg Und danke für die Geduld



  • Gut, das es jetzt geht.
    ImageLoad zeigt btw auf 0 wenn das bild entweder kein png ist, oder er aber die datei nicht findet. Normalerweise sollte es letzteres sein, ist der Pfad denn wirklich richtig?

    Das SDL fenster sollte sich eigentlich verschieben lassen, könnte höchstens sein das das ein konflikt mit der konsolenausgabe gibt, die das blockiert. Sobald die vorbei is, sollts wieder gehen.


Anmelden zum Antworten