Bonjour à tous,
j'ai 2 questions...
je me suis aperçu qu'il n'était pas possible de faire un CopyImage avec une image au format GIF, quelqu'un a t'il une solution ?
Ma 2éme question : si il n'y a pas moyen de le faire sans passer par includeBinary et catchImage peux t-on faire un SWAP ID ? En effet j'ai 2 images GIF qui tournent en boucle et au bout d'un moment j'aimerais que mon image 2 remplace l'image 1
merci pour vos réponses
[RESOLU] Probléme avec CopyImage
-
- Messages : 43
- Inscription : lun. 22/oct./2018 19:34
- Localisation : Haisnes (62)
[RESOLU] Probléme avec CopyImage
Dernière modification par Christophe le sam. 28/sept./2019 21:37, modifié 1 fois.
Re: Probléme avec CopyImage
Je réponds un poil à coté mais j'ai pas le temps de me pencher dessus.
Pourquoi ne fais tu pas un seul gif avec les 2 anims. Il te suffirait ensuite de jouer avec les numéros des frames ?
- Tu charges 1 seule images
- Tu n'as pas besoin de copy
- Tu n'as pas besoin de swapper
Pourquoi ne fais tu pas un seul gif avec les 2 anims. Il te suffirait ensuite de jouer avec les numéros des frames ?
- Tu charges 1 seule images
- Tu n'as pas besoin de copy
- Tu n'as pas besoin de swapper
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
-
- Messages : 43
- Inscription : lun. 22/oct./2018 19:34
- Localisation : Haisnes (62)
Re: Probléme avec CopyImage
Comme un bout de code vaut mieux qu'un long discours...
https://drive.google.com/drive/folders/ ... mifzLZyBsr
Ceci n'est qu'une ébauche ou plutôt une partie du code principale. Il se peut que chez vous le code fonctionne correctement mais chez moi lorsque le CatchImage au niveau de la proceure SwapImage() s'effectue il y a une latence au niveau de l'animation certes de qq ms mais genant pour moi, c'est pour cela que je souhaitais savoir si il etait possible de faire un SWAP ID qui doit etre beaucoup plus rapide
https://drive.google.com/drive/folders/ ... mifzLZyBsr
Ceci n'est qu'une ébauche ou plutôt une partie du code principale. Il se peut que chez vous le code fonctionne correctement mais chez moi lorsque le CatchImage au niveau de la proceure SwapImage() s'effectue il y a une latence au niveau de l'animation certes de qq ms mais genant pour moi, c'est pour cela que je souhaitais savoir si il etait possible de faire un SWAP ID qui doit etre beaucoup plus rapide
Re: Probléme avec CopyImage
Bon chez moi c'est ultra fluide mais j'ai une grosse babasse.
Pourquoi appliques tu ton catchimage au moment de la selection ? Forcément tu vas générer une "micro" latence
Ne peux tu pas catcher toutes tes images d'abord (et les mettre dans un bloc datasection tant qu'à faire).
Pourquoi appliques tu ton catchimage au moment de la selection ? Forcément tu vas générer une "micro" latence
Ne peux tu pas catcher toutes tes images d'abord (et les mettre dans un bloc datasection tant qu'à faire).
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Probléme avec CopyImage
Effectivement CopyImage() ne va copier qu'une seule frame de l'image. Mais rien n’empêche de faire une boucle pour copier toutes les frames de ton image.Christophe a écrit :je me suis aperçu qu'il n'était pas possible de faire un CopyImage avec une image au format GIF, quelqu'un a t'il une solution ?
Je ne suis pas sûr d'avoir correctement compris ta question. Mais j'espère que la suite du message y répondra.Christophe a écrit :si il n'y a pas moyen de le faire sans passer par includeBinary et catchImage peux t-on faire un SWAP ID ? En effet j'ai 2 images GIF qui tournent en boucle et au bout d'un moment j'aimerais que mon image 2 remplace l'image 1
Chez moi, je remarque également la latence que tu évoques lorsque la transition viens de se terminer et que tu appelle SwapImage() pour charger à nouveau la nouvelle image dans #ImageGif. Pour enlever cet accro, il ne faut plus vouloir changer l'image derrière #ImageGif. À la place il faut lui dire d'utiliser l'image qui est déjà chargé dans #ImagegifT. Pour ça il faut utiliser des variables pour enregistrer les "#Image" et il suffira de copier les entier dans ces variables pour changer d'image.Christophe a écrit :Il se peut que chez vous le code fonctionne correctement mais chez moi lorsque le CatchImage au niveau de la proceure SwapImage() s'effectue il y a une latence au niveau de l'animation certes de qq ms mais genant pour moi, c'est pour cela que je souhaitais savoir si il etait possible de faire un SWAP ID qui doit etre beaucoup plus rapide
De plus, j'ai le débogueur qui signale l'erreur « Ligne: 66 - Le #Image spécifié n'est pas initialisé » lorsque je change rapidement de sélection dans le combo box. (Code "If FrameGifT= ImageFrameCount(#ImagegifT) : FrameGifT=0 : EndIf"). Cela est dû au fait que la procédure Change() peut modifier l'image derrière #ImageGifT pendant que le thread Gif() veut l'afficher. Les solutions consistent alors à utiliser une troisième image pour faire le chargement ou à empêcher de modifier Le comboBox pendant la transition. (Personnellement j'opterais pour la première solution)
Comme l'as précisé Ar-S ce serais plus propre de mettre tes IncludeBinary dans une datasection. Même je trouve que ce serais encore mieux de laisser les images à coté de ton exécutable et de ne les charger charger en mémoire avec LoadImage() qu'au moment où tu en à besoin...
-
- Messages : 43
- Inscription : lun. 22/oct./2018 19:34
- Localisation : Haisnes (62)
Re: Probléme avec CopyImage
Merci à vous 2, j'ai effectivement resolu le probleme de latence je ne recharge plus l'image mais j' interverti leur ID en passant par des variables et non des constantes de cette façon
IdImage = #ImageGif
IdImageT = #ImageGifT
swap IdImage, IdImageT
Naheulf, tu as raison lorsque l'on change rapidement d'image ça plante ! chose que je n'avais pas remarqué
tu expliques le pourquoi du comment (je suis d'accord avec toi) mais je ne comprend pas ta façon de faire avec la 3éme image...
pour l'instant j'ai mis un DisableGadget
Merci à Ar-S et Naheulf
IdImage = #ImageGif
IdImageT = #ImageGifT
swap IdImage, IdImageT
Naheulf, tu as raison lorsque l'on change rapidement d'image ça plante ! chose que je n'avais pas remarqué
tu expliques le pourquoi du comment (je suis d'accord avec toi) mais je ne comprend pas ta façon de faire avec la 3éme image...
pour l'instant j'ai mis un DisableGadget
Merci à Ar-S et Naheulf
Re: Probléme avec CopyImage
En gros il faudrait faire un truc ressemblant à ça :Christophe a écrit :je ne comprend pas ta façon de faire avec la 3éme image...
pour l'instant j'ai mis un DisableGadget
Code : Tout sélectionner
IdImageT = #ImageGifT ; T comme Transition
IdImageC = #ImageGifC ; C comme Chargement ou Change
Procedure Change()
Shared TransparenceGif, FrameGifT, AdresseGif, IdImageT, IdImageC
Genre = GetGadgetText(#genre)
Select Genre
Case "Horreur"
CatchImage(IdImageC, ?GifHorreur) ; On charge l'image dans IdImageC
Case "Science fiction"
CatchImage(IdImageC, ?GifEspace)
Case "Aventure"
CatchImage(IdImageC, ?GifAventure)
Case "Fantastique"
CatchImage(IdImageC, ?GifFantastique)
Case "Comedie"
CatchImage(IdImageC, ?GifComedie)
Case "Animation"
CatchImage(IdImageC, ?GifAnimation)
Case "Action"
CatchImage(IdImageC, ?GifAction)
Case "Thriller"
CatchImage(IdImageC, ?GifThriller)
Default ; En cas de valeur imprévue on se rabat sur l'image par défaut : choix "Tous"
CatchImage(IdImageC, ?GifImage)
EndSelect
; On "transmet" la nouvelle image au thread Gif()
Swap IdImageC, IdImageT ; On permute avec IdImageT une fois que l'image est chargée
FrameGifT = 0
TransparenceGif=0
; On libère la mémoire qui est occupée pour rien
FreeImage(IdImageC)
EndProcedure