Sprite verändern geht nicht

Anfängerfragen zum Programmieren mit PureBasic.
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Sprite verändern geht nicht

Beitrag von Re57 »

Hallo, folgender Testcode lädt ein Sprite (Musik-Vorzeichen) und zeigt es an. Allerdings dann zunächst natürlich so, daß nicht nur das Musik-Vorzeichen angezeigt wird, sondern auch der weiße Hintergrund dazu. Kann man den irgendwie weg bekommen? Ich habe es versucht mit TransparentSpriteColor und mit DisplayTransparentSprite, aber nichts davon wirkte auch nur die Bohne. Das Handbuch präsentiert sich allerdings auch so wortkarg in dem Fall, daß ich daraus gar nicht erst entnehmen kann, wozu TransparentSpriteColor und DisplayTransparentSprite wirklich da sind. Falls es eine Lösung gibt, wie man den weißen Hintergrund in einem Sprite weg bekommt, vielen Dank. Hier der Testcode:

Code: Alles auswählen

#Window1 = 1
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered

If InitSprite() = 0
  MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf  

If InitMouse() = 0
  MessageRequester("InitMouse fehlgeschlagen", "Programm endet")
EndIf 

If InitKeyboard() = 0
  MessageRequester("InitKeyboard fehlgeschlagen", "Programm endet")
EndIf  

If OpenWindow(1,0,0,800,412,"",#Flags) = 0
  MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
EndIf

If OpenWindowedScreen(WindowID(1),0,0,800,412) = 0
  MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
EndIf



UseJPEGImageDecoder() 
If LoadSprite(1,"C:/Users/lenovo/Desktop/kr.jpg") = 0
  MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf  
ZoomSprite(1,50,50) 

StartDrawing(ScreenOutput())
Box(0,0,800,412,RGB(0,150,0))
StopDrawing()

Repeat
    
    event = WaitWindowEvent()
    Select event
    Case #PB_Event_CloseWindow
    schliessen = 1
    EndSelect 

    DisplaySprite(1,250,150)
    FlipBuffers()  
    
Until schliessen = 1  
End
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite verändern geht nicht

Beitrag von Re57 »

Hatte ich schon gelesen. Und dann?

Mit allem anderen, was ich in PureBasic brauche, komme ich bisher gut voran, nur Sprites sind das rote Tuch. Bitte um Lösung für das oben genannte Problem, Danke.
Zuletzt geändert von Re57 am 19.04.2020 14:10, insgesamt 1-mal geändert.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Sprite verändern geht nicht

Beitrag von Mijikai »

Das Sprite wird mit per Pixel Alpha-Kanal Unterstützung erstellt, benötigt
für DisplayTransparentSprite(). Das Bildformat muss dies unterstützen (derzeit
nur PNG und TIFF)
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite verändern geht nicht

Beitrag von Re57 »

Jetzt mit PNG-Sprite geht es, Danke!!

P.S.: Zu früh gefreut, war mein Fehler. Ich hatte zunächst ein anderes PNG-Sprite verwendet. Das eigentliche PNG-Sprite, was ich verwenden will (schwarzes Musik-Zeichen mit weißem Hintergrund) wird zwar geladen, aber nur als schwarze Fläche angezeigt. Beschädigt ist das Sprite aber wohl nicht, in LibreOfficeDraw wird das einwandfrei angezeigt. Wie kommt das? Danke.

Hier jetzt der veränderte Code:

Code: Alles auswählen

#Window1 = 1
#Flags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered

If InitSprite() = 0
  MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf  

If InitMouse() = 0
  MessageRequester("InitMouse fehlgeschlagen", "Programm endet")
EndIf 

If InitKeyboard() = 0
  MessageRequester("InitKeyboard fehlgeschlagen", "Programm endet")
EndIf  

If OpenWindow(1,0,0,800,412,"",#Flags) = 0
  MessageRequester("OpenWindow fehlgeschlagen", "Programm endet")
EndIf

If OpenWindowedScreen(WindowID(1),0,0,800,412) = 0
  MessageRequester("OpenWindowedScreen fehlgeschlagen", "Programm endet")
EndIf



 UsePNGImageDecoder() 
If LoadSprite(1,"C:/Users/lenovo/Desktop/kr.png",#PB_Sprite_AlphaBlending) = 0
  MessageRequester("InitSprite fehlgeschlagen", "Programm endet")
EndIf  
ZoomSprite(1,50,50)

StartDrawing(ScreenOutput())
Box(0,0,800,412,RGB(0,150,0))
StopDrawing()

Repeat
    
    event = WaitWindowEvent()
    Select event
    Case #PB_Event_CloseWindow
    schliessen = 1
    EndSelect 

    DisplayTransparentSprite(1,250,150,200,RGB(0,0,0))
    FlipBuffers()  
    
Until schliessen = 1  
End
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite verändern geht nicht

Beitrag von Re57 »

Mit den Code-Zeilen

Code: Alles auswählen

UsePNGImageDecoder() 
If LoadSprite(1,"C:/Users/lenovo/Desktop/kr.png",#PB_Sprite_AlphaBlending) = 0
  MessageRequester("InitSprite fehlgeschlagen", "")
EndIf  
ZoomSprite(1,50,50)

StartDrawing(ScreenOutput())
Box(0,0,800,412,RGB(0,150,0))
StopDrawing()

TransparentSpriteColor(1,RGB(255,255,255))

Repeat
    
    event = WaitWindowEvent()
    Select event
    Case #PB_Event_CloseWindow
    schliessen = 1
    EndSelect 
    
    DisplayTransparentSprite(1,230,230,200,RGB(0,0,0))
    FlipBuffers()
wird nun tatsächlich das Sprite richtig angezeigt, allerdings ist das Musik-Symbol selbst dann nur noch zu erahnen. Liegt dann wohl an der vorherigen Konvertierung von JPEG auf PNG.
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Sprite verändern geht nicht

Beitrag von Kiffi »

Re57 hat geschrieben:Mit den Code-Zeilen [...] wird nun tatsächlich das Sprite richtig angezeigt, allerdings ist das Musik-Symbol selbst dann nur noch zu erahnen. Liegt dann wohl an der vorherigen Konvertierung von JPEG auf PNG.
woher sollen wir das denn wissen? Lade mal beide Bilder irgendwo hoch (beispielsweise auf https://imgur.com/). Ich wette, dass Dir dann hier jemand helfen kann.
Hygge
Re57
Beiträge: 43
Registriert: 10.04.2020 12:19

Re: Sprite verändern geht nicht

Beitrag von Re57 »

Jetzt habe ich ein völlig originales PNG-Sprite mit demselben Musik-Symbol verwendet und das läuft 1a. Ich wußte ja selber nicht, daß sich Konvertierungen so negativ auswirken können. Danke Kiffi und auch nochmal an alle anderen in diesem Thread.
Antworten