SaveSprite avec couche Alpha

Programmation d'applications complexes
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

SaveSprite avec couche Alpha

Message 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)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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 :)
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Message 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 !
Répondre