Seite 1 von 3

Von libSDL_image zu "normalen" Image

Verfasst: 31.05.2009 13:08
von Tompazi
Wie komme ich von sowas:

Code: Alles auswählen

      Image$ = "sample.gif"
      
      If OpenLibrary(0,"/usr/lib/libSDL_image-1.2.so.0.1.5") And ExamineLibraryFunctions(0)
        SDL_Surface *image;
        image=CallFunction(0,"IMG_LoadTyped_RW",SDL_RWFromFile_(Image$, "rb"), 1, "GIF")
      EndIf
auf ein normales Bild mit dem ich mit den PB Funktionen weiter arbeiten kann?


MfG Tompazi

PS: Code scheint (!) zu funktionieren
Referenz http://jcatki.no-ip.org:8080/SDL_image/ ... .html#SEC1

Verfasst: 01.06.2009 12:28
von Tompazi
Niemand?

MfG Tompazi

Verfasst: 01.06.2009 12:58
von Kaeru Gaman
eine Zeile ist nicht übersetzt:

Code: Alles auswählen

        SDL_Surface *image; 
muss wohl lauten

Code: Alles auswählen

Define *image.SDL_Surface
und in der nächsten zeile muss "image" dann auch ein pointer sein.

schau dir halt mal die Struct SDL_Surface und die vom Image in PB an,
irgendwie kann man das bestimmt übertragen.

Verfasst: 01.06.2009 14:54
von Tompazi
danke
hmm, also könnte ich aus *image.SDL_Surface alle Daten herauslesen und sie dann per CreateImage() + Point() wieder auf ein Bild schreiben

http://sdl.beuc.net/sdl.wiki/SDL_Surface
http://sdl.beuc.net/sdl.wiki/SDL_PixelFormat

nur wie komme ich da an alle Bild/Pixelinformationen ran?

MfG Tompazi

Verfasst: 01.06.2009 15:57
von Kaeru Gaman

Code: Alles auswählen

typedef struct SDL_Surface {
    Uint32 flags;                           /* Read-only */
    SDL_PixelFormat *format;                /* Read-only */
    int w, h;                               /* Read-only */
    Uint16 pitch;                           /* Read-only */
    void *pixels;                           /* Read-write */
    SDL_Rect clip_rect;                     /* Read-only */
    int refcount;                           /* Read-mostly */

  /* This structure also contains private fields not shown here */
} SDL_Surface;
so wie ich das jetzt interpretiere:

*pixels ist der pointer zum Speicherbereich, in dem hintereinander weg die Bildinformationen stehen.
die zeilen haben eine länge von pitch, die bildgröße ist w * h.
wie die Pixels codiert sind sagt dir der Inhalt der SDL_PixelFormat struktur...

wenn das Pixelformat identisch ist, müßtest du mit MemCopy einfach von *pixel in dein eigenes Image rüberziehen können....

Verfasst: 01.06.2009 23:41
von Tompazi
und wie krieg ich das? mit peek?

MfG Tompazi

Verfasst: 02.06.2009 00:19
von Kaeru Gaman
am besten definierst du dir die strukturen, damit du direkt mit stukturierten pointern arbeiten kannst.

im Abschnitt zu SDL_PixelFormat steht weiter unten noch ein bissel mehr dazu, wie man drauf zugreifen kann.

Verfasst: 02.06.2009 15:23
von Tompazi
So irgendwie?
*image() is not a function, array, macro or linked list.

Code: Alles auswählen

      Image$ = "sample.gif"
      Structure My_SDL_PixelFormat
      *palette
      BitsPerPixel.b
      BytesPerPixel.b
      RGBAmask.b
      RGBAloss.b
      RGBAshift.i
      colorkey.i
      alpha.b
      EndStructure
      
      Structure My_SDL_Surface
       flags.i
       *format.My_SDL_PixelFormat
       h.i
       w.i
       pitch.w
      EndStructure
      
      If OpenLibrary(0,"/usr/lib/libSDL_image-1.2.so.0.1.5") And ExamineLibraryFunctions(0)
         Define *image.My_SDL_Surface
         *image=CallFunction(0,"IMG_LoadTyped_RW",SDL_RWFromFile_(Image$, "rb"), 1, "GIF")
         Debug *image()\h
      EndIf
MfG Tompazi

Verfasst: 02.06.2009 15:27
von cxAlex
So:

Code: Alles auswählen

Image$ = "sample.gif"
      Structure My_SDL_PixelFormat
        *palette
        BitsPerPixel.b
        BytesPerPixel.b
        RGBAmask.b
        RGBAloss.b
        RGBAshift.i
        colorkey.i
        alpha.b
      EndStructure
      
      Structure My_SDL_Surface
        flags.i
        *format.My_SDL_PixelFormat
        h.i
        w.i
        pitch.w
      EndStructure
      
      If OpenLibrary(0, "/usr/lib/libSDL_image-1.2.so.0.1.5") And ExamineLibraryFunctions(0)
        Define *image.My_SDL_Surface
        *image = CallFunction(0, "IMG_LoadTyped_RW", SDL_RWFromFile_(Image$, "rb"), 1, "GIF")
        Debug *image\h
      EndIf

Verfasst: 02.06.2009 15:38
von Tompazi
aha, also bei pointern ohne Klamern, Danke.

und in Bei einem Pointer mit struktur in einer Struktur?

Code: Alles auswählen

Debug *image\*format\RGBAshift
Syntax error: structure field missing.
MfG Tompazi