Mais ça ne permet pas de comprendre pourquoi mon pgm, affiche ce à quoi je veux arriver, et par contre quand j'enregistre les images ça ne va pas ?
Code : Tout sélectionner
; PGM Censé afficher des sprites qui tournent et enregistrer les images dans des fichiers
; situés à la racine du disque défini dans la variable DISC$, l'affichage ça va, mais les
; fichiers enregistrés sont bizarres....
UsePNGImageEncoder()
;{ CONSTANTES
#BDLA = 2 ; Largeur de bordure
#CARRE = 0 ; 0 : sprites carrés, 1 sprites rectangulaires
#COTS = 120 ; METTRE ICI LE PGCD DE LAREC et HAUREC
#HAUREC = 1080 ; Hauteur écran
#LAREC = 1920 ; Largeur écran
#NBSPRI = 100 ; Nombre max de sprites
#ECRAN = 500 ; Sprite contenant l'écran
;}
;{ STRUCTURES
Structure msp ; Sprite carré
cot.i ; Côté du sprite
mode.i ; Option se dessin du sprite
num.i ; Numéro du sprite
X.f ; X du sprite
Y.f ; Y du sprite
EndStructure
;}
;{ VARIABLES
DISC$ = "E:\"
lcot.i = #COTS
n1.i = Int(#LAREC / #COTS)
n2.i = Int(#HAUREC / #COTS)
DecaY.i = Int ((#HAUREC - n2*#COTS)/2)
DecaX.i = n3
;}
;{ création du contexte
; Ouverture fenêtre
If OpenWindow(0,0,0,#LAREC,#HAUREC,"wwwww",#PB_Window_BorderLess)= 0
End
EndIf
;Initialisation des sprites, du clavier et de la souris
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Erreur", "Impossible d'initialiser l'écran.")
CloseWindow(#PB_All)
End
EndIf
;Ouverture de l'écran
If OpenScreen(#LAREC,#HAUREC,32,"Exemple OpenScreen",PB_Screen_WaitSynchronization) = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran.")
CloseScreen()
CloseWindow(#PB_All)
End
EndIf
;}
;{ création des sprites
nb_sp = n1*n2
Dim s_p.msp(nb_sp+1)
Num_ecran = nb_sp+1
CreateSprite( Num_ecran, #LAREC, #HAUREC, #PB_Sprite_AlphaBlending ) ; Fond d'écran
For i = 0 To nb_sp ; Petits sprites
If CreateSprite(i, #COTS, #COTS, #PB_Sprite_AlphaBlending ) ; Resultat = CreateSprite(i, #COTS, #COTS, #PB_Sprite_AlphaBlending )
s_p(i)\num = i
s_p(i)\cot = #COTS
s_p(i)\mode = #PB_Sprite_AlphaBlending
Else
MessageRequester("Erreur", "Création sprites")
CloseScreen()
CloseWindow(#PB_All)
End
EndIf
Next ; i = 0 To nb_sp
;}
;{ Init des spritesA$
ClearScreen(RGB(255, 0, 0)) ; fond uni rouge
;FlipBuffers()
For j = 0 To nb_sp ; - 1
StartDrawing(SpriteOutput(s_p(j)\num))
If j%2
Box(0,0, #COTS, #COTS, RGBA(255,0,0,0))
Ellipse(#COTS/2,#COTS/2, (#COTS-38)/2, #COTS/4, RGBA(0, 0, 255, 255)) ; ellipse bleue
Else
Box(0,0, #COTS, #COTS, RGBA(255,0,0,0))
Ellipse(#COTS/2,#COTS/2, (#COTS-38)/2, #COTS/4, RGBA(0, 255, 0, 255)); Ellipse verte
EndIf
StopDrawing()
Next ; j = 0 To nb_sp - 1
;}
FlipBuffers()
ClearScreen(RGB(255, 0, 0)) ; Un rouge fond uni
FlipBuffers()
GrabSprite(Num_ecran, 0, 0, #LAREC, #HAUREC)
A$ = DISC$ + "FOND_ECRAN.bmp"
SaveSprite(Num_ecran, A$, #PB_ImagePlugin_BMP)
nump_spri = 0
;{ Affichage des sprites
For kk = 0 To 360 Step 36
ClearScreen(RGB(255, 0, 0)) ; fond uni rouge
For j = 0 To nb_sp
RotateSprite(s_p(j)\num, kk, #PB_Absolute) ;
Next ; j = 0 To nb_sp
For j = 0 To nb_sp ;- 1
k = j % n1
l = j / n1
s_p(j)\X = k * #COTS ; + 10
s_p(j)\Y = l * #COTS ; + DecaY
DisplaySprite(j, s_p(j)\X,s_p(j)\Y)
If j = nb_sp-1
GrabSprite(#ECRAN, 0, 0, #LAREC, #HAUREC)
A$ = DISC$ + "ecran"+ Str(nump_spri) + ".png"
SaveSprite(#ECRAN, A$, #PB_ImagePlugin_PNG)
nump_spri + 1
EndIf
k = j % n1
l = j / n1
Next ; j = 0 To nb_sp
FlipBuffers()
Next ; kk = 0 To 360
;}
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape) ; On quitte l'application en appuyant sur la touche Echap (ESC)
End