Von libSDL_image zu "normalen" Image

Für allgemeine Fragen zur Programmierung mit PureBasic.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Von libSDL_image zu "normalen" Image

Beitrag 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
Bild
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

Niemand?

MfG Tompazi
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag 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
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag von Tompazi »

und wie krieg ich das? mit peek?

MfG Tompazi
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag 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
Bild
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag 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
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Tompazi
Beiträge: 211
Registriert: 22.09.2007 15:38

Beitrag 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
Bild
Antworten