USEJPEGDecoder Problem

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

USEJPEGDecoder Problem

Beitrag von ProgOldie »

Hallo,
ich habe mir 'mal das Beispiel zu Sprites aus der PB-Hilfe heruntergeladen und es ganz simpel (?) um die JPEG-Decoder erweitert:

Code: Alles auswählen


UseJPEG2000ImageDecoder()
UseJPEGImageDecoder()
UseTGAImageDecoder()
UsePNGImageDecoder()
UseTIFFImageDecoder()

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Error", "Can't open the sprite system", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 1000, 800, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
  ButtonGadget(1, 10,  10, 100, 25, "Grab input")
  ButtonGadget(2, 120,  10, 100, 25, "Button 2")
  ButtonGadget(3, 230,  10, 100, 25, "Button 3")
  TextGadget  (4, 10, 40, 300, 30, "Press 'F1' to ungrab keyboard and mouse")
  MessageRequester("Datei",GetPathPart(ProgramFilename())+"/Data/Actors/File_020.JPEG")

  If OpenWindowedScreen(WindowID(0), 40, 80, 600, 700, 0, 0, 0)
    
    If LoadSprite(0, GetPathPart(ProgramFilename())+"/Data/Actors/File_020.JPEG")
      ;ZoomSprite(0,70,70)
    EndIf
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
    End
  EndIf

EndIf

direction = 1
playerX = 1
playerY = 1

Repeat
  Repeat
    ; Always process all the events to flush the queue at every frame
    Event = WindowEvent()
    
    Select Event
      Case #PB_Event_CloseWindow
        Quit = 1
    
      Case #PB_Event_Gadget
        
        ; Do the normal application management here
        Gadget = EventGadget()
    
        Select Gadget
          Case 1
            InputReleased = 0
            ReleaseMouse(#False)
            SetGadgetText(4, "Press 'F1' to ungrab keyboard and mouse")

          Case 2, 3
            SetGadgetText(4, "Button "+Str(Gadget)+" pressed.")
        EndSelect
    
    EndSelect
    
  Until Event = 0 ; Quit the event loop only when no more events are available
  
  If InputReleased = 0

    ExamineMouse()

    ; do the sprite & screen management at every frame
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Up)    And playerY > 0   : playerY -3 : EndIf  
    If KeyboardPushed(#PB_Key_Down)  And playerY < 280 : playerY +3 : EndIf  
    If KeyboardPushed(#PB_Key_Left)  And playerX > 0   : playerX -3 : EndIf  
    If KeyboardPushed(#PB_Key_Right) And playerX < 300 : playerX +3 : EndIf  

    If KeyboardPushed(#PB_Key_F1)
      ReleaseMouse(#True)
      InputReleased = 1
    EndIf
  EndIf
  
  ; Clear the screen and draw our sprites
  ;ClearScreen(RGB(0,0,0))
  ClearScreen(RGB(50,50,50))
  ClipSprite(0, 0, 0, x, x/8)
  DisplaySprite(0, x, 100)
  DisplaySprite(0, x, x)
  DisplaySprite(0, 300-x, x)
  DisplaySprite(0, playerX, playerY)

  x + direction
  If x > 800 : direction = -1 : EndIf   ; moving back to the left with negative value
  If x < 0   : direction =  1 : EndIf   ; moving to the right with positive value
    
  FlipBuffers()       ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back

Until  Quit Or KeyboardPushed(#PB_Key_Escape)
Das Ganze funktioniert wie erwartet mit BMP-Bildern, nicht aber mit JPEG-Bildern, auch nicht mit recht kleinen.
Woran liegt das?
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: USEJPEGDecoder Problem

Beitrag von Kurzer »

Das wird vermutlich an Deinem JPG liegen.
Ich hab's gerade ausprobiert und das Sprite wird korrekt angezeigt (PB 5.21 LTS).

Kannst Du Dein JPG mal hochladen?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: USEJPEGDecoder Problem(gelöst)

Beitrag von ProgOldie »

Der Tipp hat schon geholfen,danke!
Es war ein blöder Fehler: In der Explorerliste erschien als Tooltip "JPEG-Bild". Das ist aber nur der allgemeine Name, denn die Dateiendung war .JPG, weshalb einfach die Datei nicht gefunden werden konnte.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten