DisplayTransparentSprite Fehler

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

DisplayTransparentSprite Fehler

Beitrag von xperience2003 »

hi, hab da wiedermal ein paar probleme entdeckt ..die ein kleines projekt wieder von anfang an scheitern lassen ;)

ich lade ein sprite mit meinen waren-icons
und möchte dann die einzelnen tiles ausschneiden

hjier der testcode

Code: Alles auswählen


InitSprite():InitKeyboard():InitMouse()
UsePNGImageDecoder()	

If OpenScreen(800, 600,32,"wirtschaftstest")
    
    
   LoadSprite(1000, "waren/waren64x64.png",#PB_Sprite_AlphaBlending )
   ClearScreen(RGB(0,0,0))
   DisplayTransparentSprite(1000,0,0)
    
    i=0
    For y=0 To 5
      For x=0 To 9
        GrabSprite(i, x*64, y*64, 64, 64 , #PB_Sprite_AlphaBlending )
       ; SaveSprite(i,"ware_"+Str(i)+".png",#PB_ImagePlugin_PNG)      
      i+1  
     Next
    Next
    
    Repeat
      
    ExamineKeyboard()
      
      If KeyboardPushed(#PB_Key_Escape)
      Quit=1  
      EndIf
          
      ClearScreen(RGB(80,70,85))
   
      DisplayTransparentSprite(1000,0,10)
        
      For i=2 To 9
        DisplayTransparentSprite(i,i*65,450)
      Next
             
      FlipBuffers() 
    Until  Quit
  EndIf
  End
  

im bild sieht man was passiert
oben ist das ganze tileset unten stelle ich ein paar ausgeschnittene dar
oben wird das ganze bild korrekt dargestellt unten bei den einzel-tiles wird
der schatten niicht richtig dargestellt, die frage ist WARUM
unter linux und unter windows

Bild

..ach ja..und savesprite geht natürlich auch nicht :(
amiga rulez...
Rebirth Software
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Re: DisplayTransparentSprite Fehler

Beitrag von xperience2003 »

hier nochmal der screenshot...wird oben nicht angezeigt

http://rebirthsoftware.rf.gd/fehler.jpg
amiga rulez...
Rebirth Software
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: DisplayTransparentSprite Fehler

Beitrag von STARGÅTE »

Wenn du mit GrabSprite() ein Ausschnitt vom Bildschirm erstellst, hat dieser natürlich kein Alpha-Kanal mehr.
Deswegen sind sehen die Bilder unten so komisch aus. Bei DisplayTransparentSprite() ist schwarz auch transparent, deswegen haben die Bilder keine komplette schwarze Box um sich.

Du kannst nun entweder ClipSprite() nutzen um die Icons auszuschneiden oder aber du machst das mit den Image Befehlen. Dort hat GrabImage() auch die Option ein zweites Image aus einem Quell-Image zu erzeugen, unter Angabe von Position und Größe.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Re: DisplayTransparentSprite Fehler

Beitrag von xperience2003 »

ok, ist einleuchtend
wozu ist dann der syntax #PB_Sprite_AlphaBlending ?

habs nun im malprogramm einzeln abgespeichert und einzeln geladen,
werde das mit dem images ausschneiden und in den texturenbuffer kopieren mal probieren

danke
amiga rulez...
Rebirth Software
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: DisplayTransparentSprite Fehler

Beitrag von DarkDragon »

xperience2003 hat geschrieben: 03.12.2023 20:12 ok, ist einleuchtend
wozu ist dann der syntax #PB_Sprite_AlphaBlending ?

habs nun im malprogramm einzeln abgespeichert und einzeln geladen,
werde das mit dem images ausschneiden und in den texturenbuffer kopieren mal probieren

danke
Der Screen buffer kann tatsächlich auch einen Alpha Channel besitzen, aber wohl nur mit OpenScreen und eigentlich müsste man dann bei der clearing farbe auch den alpha wert angeben können:

https://www.purebasic.com/documentation ... creen.html

Code: Alles auswählen

Depth	It can be one the following values:
  16: 65000 colors, fixed palette
  24: 16 Mo colors, fixed palette
  32: 16 Mo colors, faster than 24-bit mode, allows alpha blending
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten