PureBoard
http://forums.purebasic.com/german/

Sprite verändern geht nicht
http://forums.purebasic.com/german/viewtopic.php?f=16&t=31975
Seite 1 von 1

Autor:  Re57 [ 19.04.2020 13:25 ]
Betreff des Beitrags:  Sprite verändern geht nicht

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:
#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

Autor:  Mijikai [ 19.04.2020 13:43 ]
Betreff des Beitrags:  Re: Sprite verändern geht nicht

Help -> LoadSprite()
https://www.purebasic.com/german/documentation/sprite/loadsprite.html

Autor:  Re57 [ 19.04.2020 13:47 ]
Betreff des Beitrags:  Re: Sprite verändern geht nicht

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.

Autor:  Mijikai [ 19.04.2020 13:51 ]
Betreff des Beitrags:  Re: Sprite verändern geht nicht

Zitat:
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)

Autor:  Re57 [ 19.04.2020 14:08 ]
Betreff des Beitrags:  Re: Sprite verändern geht nicht

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:
#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

Autor:  Re57 [ 19.04.2020 15:41 ]
Betreff des Beitrags:  Re: Sprite verändern geht nicht

Mit den Code-Zeilen

Code:
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.

Autor:  Kiffi [ 19.04.2020 15:53 ]
Betreff des Beitrags:  Re: Sprite verändern geht nicht

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.

Autor:  Re57 [ 19.04.2020 15:58 ]
Betreff des Beitrags:  Re: Sprite verändern geht nicht

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.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/