Page 1 sur 1

SaveSprite avec couche Alpha

Publié : jeu. 30/juil./2009 7:04
par Thyphoon
Haaaaargh !!! Un truc tout con, qui me parait impossible a faire en PB :cry: (a moins que quelqu'un est une solution)
Charger une image en PNG avec couche Alpha et le découper en plusieurs petit sprite puis les sauvegarder en PNG toujours en gardant les infos de la couche Alpha ...

voici l'image en question pour tester ( Et on critique pas hein ! c'est moi qui l'ai dessiné)
Image
Le grabsprite ne supporte pas l'option #PB_Sprite_AlphaBlending au moieux on a une image toute noir.
Je me suis dit peut être en faisant un clipsprite sur le sprite et en le sauvegardant ...mais là on a plus rien du tout l'image sauvegardé n'est pas reconnu.

Voilà si quelqu'un a une idée !!!

Code : Tout sélectionner

If InitSprite() = 0
    MessageRequester("Erreur", "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !", 0)
    End
  EndIf
  
  If OpenWindow(0, 0, 0, 220, 160, "Un écran dans une fenêtre...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(0, 170, 135, 45, 20, "Quitter")

    If OpenWindowedScreen(WindowID(0), 0, 0, 160, 160, 0, 0, 0)=0
      MessageRequester("Erreur", "Impossible d'ouvrir un écran dans la fenêtre!", 0)
      End
    EndIf
  EndIf
  
  Global Nbsprite=0
  
  UsePNGImageDecoder()
  UsePNGImageEncoder()
  
  Procedure LoadSpriteAlphaAuto(IdSprite.l,Filename.s,Option.l=0)
  ;Merci a Cpl.Bator,Case et Ollivier sans qui cette fonction n'existerait pas !
  ;http://www.purebasic.fr/french/viewtopic.php?t=9324
  
  ;On verifie si le sprite est un PNG si il y  a une couche alpha
  If LCase(GetExtensionPart(Filename.s))="png" And ReadFile(0,Filename.s)
    FileSeek(0,25)
    If ReadByte(0)=6
      Option.l=Option | #PB_Sprite_AlphaBlending;Si c'est le cas alors on rajoute l'option qui va bien
    EndIf
    CloseFile(0)
  EndIf

  If LoadSprite(IdSprite,Filename,Option)
    ProcedureReturn #True
  Else
    NbSprite-1
    Debug "ERROR:"+Filename
    ProcedureReturn #False
  EndIf
EndProcedure

  Debug LoadSpriteAlphaAuto(10,"house.png")

;Coordonée du sprite (on verra plus tard pour la boucle )
  x=4
  y=4
  Debug GrabSprite(11,32*x,32*y,32,32)
  ;ClipSprite(10,32*x,32*y,32,32) ; si on test le clip sprite ne pas oublier de changer le numero de sprite dans savesprite
  SaveSprite(11,"home_"+Str(x)+"x"+Str(y)+".png",#PB_ImagePlugin_PNG)

Publié : jeu. 30/juil./2009 19:27
par Backup
la version 3.40 sera completement revu a ce sujet
et sera entierement transparency friendly pour tout ce qui touche au gadgets
et images :)

Publié : jeu. 30/juil./2009 19:28
par Thyphoon
Dobro a écrit :la version 3.40 sera completement revu a ce sujet
et sera entierement transparency friendly pour tout ce qui touche au gadgets
et images :)
comme tu le dis gadgets et images... Pour les sprites j'éspère aussi mais je ne suis pas certain .. Mais ça serait vraiment génial !!! :P

Publié : ven. 14/août/2009 8:55
par Thyphoon
pour la 4.40 ! donc en utilisant la lib image tout marche parfaitement (l'alpha peut être enregistré) pour la lib sprite, ça marche mieux qu'avant mais les sprites enregistré avec une couche alpha déconne ... je vais peut être posté sur le forum anglais !