Page 1 sur 1
Dessin d'une image dans une autre (Resolu)
Publié : dim. 28/déc./2014 12:20
par Kwai chang caine
Bonjour à tous
Je ne sais pas pourquoi, mais à chaque fois que j'essaie de faire un tantième de petit dessin à la "beeeeep"...j'ai peur.
Je ne sais pas pourquoi...mais je sais que j'ai raison d'avoir peur
Ca fait 1 heure que je trime lamentablement pour faire apparaître une image sur un fond vert...et y'a que ce
@#%£^ù¨ de fond vert qui apparaît
Ca m'énneeeeeeeeeerveeeee !!!
Code : Tout sélectionner
UseJPEGImageDecoder()
If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
ImageGadget(0,0,0,500,300,0)
PbIdImage = LoadImage(#PB_Any, "D:\1000_548639739_1.jpg")
If PbIdImage
LargeurImageGrid = 110
HauteurImageGrid = 110
LargeurImageBase = ImageWidth(PbIdImage)
HauteurImageBase = ImageHeight(PbIdImage)
PbIdImageFond = CreateImage(#PB_Any, LargeurImageGrid, HauteurImageGrid)
StartDrawing(ImageOutput(PbIdImageFond))
Box(0, 0, LargeurImageGrid, HauteurImageGrid, RGB(217, 248, 207))
If LargeurImageBase > HauteurImageBase
Coef.f = LargeurImageGrid / LargeurImageBase
HauteurImage = HauteurImageBase * Coef
LargeurImage = LargeurImageGrid
ResizeImage(PbIdImage, LargeurImage, HauteurImage)
DrawImage(PbIdImage, 0, 0)
Else
Coef.f = HauteurImageGrid / HauteurImageBase
LargeurImage = LargeurImageBase * Coef
HauteurImage = HauteurImageGrid
ResizeImage(PbIdImage, LargeurImage, HauteurImage)
DrawImage(PbIdImage, 0,0)
EndIf
StopDrawing()
ResizeWindow(0, #PB_Ignore, #PB_Ignore, LargeurImageGrid, HauteurImageGrid)
SetGadgetState(0, ImageID(PbIdImageFond))
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
FreeImage(PbIdImage)
FreeImage(PbIdImageFond)
EndIf
Tellement j'ai trouvé magnifique la pub à la télé, je voulais poser ma candidature pour rejoindre la TEAM d'assassin creed...je crois que je vais attendre un peu
Bonne journée
Re: Dessin d'une image dans une autre
Publié : dim. 28/déc./2014 12:49
par Ar-S
Tu confonds ID et numéro de l'image.
Énumère tes images et évites les PB_Any pour tes tests ce sera plus claire.
-- edit --
Ajout de debug recapitulatif
Code : Tout sélectionner
UseJPEGImageDecoder()
Enumeration images
#I1
#I2
EndEnumeration
; image 1
PbIdImage = LoadImage(#I1, "D:\Pics\avatars\albator50.jpg") ; <<< Chemin à modifier
; Image 2 (fond)
LargeurImageGrid = 110
HauteurImageGrid = 110
LargeurImageBase = ImageWidth(#I1)
HauteurImageBase = ImageHeight(#I1)
PbIdImageFond = CreateImage(#I2, LargeurImageGrid, HauteurImageGrid)
; Dessin
If PbIdImage <> 0
StartDrawing(ImageOutput(#I2))
Box(0, 0, LargeurImageGrid, HauteurImageGrid, RGB(217, 248, 207))
DrawImage(PbIdImage, 0,0)
StopDrawing()
Else
Debug "image non chargée"
End
EndIf
;Récapitulatif
Debug "Id PbIdImage (image #I1) : " + PbIdImage
Debug "Num de l'image #I1 : " + #I1
Debug ""
Debug "Id PbIdImageFond (image #I2) : " + PbIdImageFond
Debug "Num de l'image #I2 : " + #I2
;------------
If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
ImageGadget(0,0,0,500,300, PbIdImageFond)
ResizeWindow(0, #PB_Ignore, #PB_Ignore, LargeurImageGrid, HauteurImageGrid)
SetGadgetState(0, ImageID(#I2))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
FreeImage(#PB_All)
EndIf
Re: Dessin d'une image dans une autre
Publié : dim. 28/déc./2014 14:18
par microdevweb
Bonjour Kwai chang caine,
Voila une petite correction à la vas vite
J'ai pris une image au hasard
Le gros problème tu a oublier ImageId() dans DrawImage

Ca m'arrive tous le temps
Autre chose, attention à
tu mélange des float et integer, le résultat risque de ne pas être correct
Code : Tout sélectionner
UseJPEGImageDecoder()
If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
ImageGadget(0,0,0,500,300,0)
PbIdImage = LoadImage(#PB_Any, "téléchargement.jpg")
If PbIdImage
LargeurImageGrid = 110
HauteurImageGrid = 110
LargeurImageBase = ImageWidth(PbIdImage)
HauteurImageBase = ImageHeight(PbIdImage)
PbIdImageFond = CreateImage(#PB_Any, LargeurImageGrid, HauteurImageGrid)
StartDrawing(ImageOutput(PbIdImageFond))
Box(0, 0, LargeurImageGrid, HauteurImageGrid, RGB(217, 248, 207))
If LargeurImageBase > HauteurImageBase
Coef.f = LargeurImageGrid / LargeurImageBase
HauteurImage = HauteurImageBase * Coef
LargeurImage = LargeurImageGrid
ResizeImage(PbIdImage, LargeurImage, HauteurImage)
DrawImage(ImageID(PbIdImage), 0, 0)
Else
Coef.f = HauteurImageGrid / HauteurImageBase
LargeurImage = LargeurImageBase * Coef
HauteurImage = HauteurImageGrid
ResizeImage(PbIdImage, LargeurImage, HauteurImage)
DrawImage(ImageID(PbIdImage), 0,0)
EndIf
StopDrawing()
ResizeWindow(0, #PB_Ignore, #PB_Ignore, LargeurImageGrid, HauteurImageGrid)
SetGadgetState(0, ImageID(PbIdImageFond))
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
FreeImage(PbIdImage)
FreeImage(PbIdImageFond)
EndIf
Re: Dessin d'une image dans une autre
Publié : dim. 28/déc./2014 17:54
par Kwai chang caine
Ouaaahh !!! merci beaucoup à vous deux...vous me redonnez espoir dans ma candidature
@Ars
Tu as raison, j'ai toujours du mal avec ces #Pb_Any, j'suis pas sur mais j'ai pas l'impression qu'ils renvoient toujours la même chose selon le gadget

Normalement c'est l'index qui est généré automatiquement par PB....mais je m'y perd souvent
Si je les ai utilisé, c'est pas pour savoir si tu y comprenais quelque chose
Mais parce que comme à chaque fois que je demande un coup de main...c'est à dire presque tout le temps
J'essaie de reproduire un petit code qui utilise les même fonctions afin que les copains n'aient pas à se taper un code de 10 pages.
Et c'est à l'origine, un code pour générer des centaines de thumbails dans une GridGadget donc j'ai besoin d'une génération des ID auto ...
En tout cas ça marche au poil, encore merci ARS
@MicroDevWeb
Tu as raison aussi, des que y'a des math.....je me sent un peu seul
Ton code fait apparaître l'image dans sa proportion, c'est ce que je voulais faire.
Il me reste plus qu'à la centrer
Encore merci aussi à toi....
Avec mes conneries de gridgadget tout "pourite"...j'ai retardé ton supergridgadget à toi, je vais donc essayer d'être sage à partir de maintenant

Tu va me dire utiliser de la "Flotte" en période de noël, c'est quand même être sage non ???

Re: Dessin d'une image dans une autre [Résolu]
Publié : dim. 28/déc./2014 18:10
par microdevweb
Il n'y pas de mal; C'est avec plaisir.
Re: Dessin d'une image dans une autre [Résolu]
Publié : jeu. 08/janv./2015 14:32
par Kwai chang caine
Une autre question
Quand on fait un CloseWindow() dans le cas du dessus est ce que l'image est automatiquement libérée à votre avis ??
Re: Dessin d'une image dans une autre
Publié : jeu. 08/janv./2015 17:03
par falsam
Je ne sais pas ce que tu appelles libéré mais si il s'agit du handle alors oui.
J'avoue que je ne comprend pas ton code. L'image verte au finale est de taille égale à l'image chargée ? ou le contraire ?
Re: Dessin d'une image dans une autre
Publié : jeu. 08/janv./2015 17:15
par Kwai chang caine
Bonjour FALSAM
C'est juste pour savoir si quand on a fait une fenete, créé un gadget image et mis une image dedans, si on peut se passer de faire un FreeImage() quand on ferme la fenetre ?
A voir le code de MicroDevWeb, apparement l'image n'est pas libérée car il fait le FreeImage apres avoir fermé la fenetre

Et moi le probleme c'est que je créé noir de fenetres et je ne voulais pas avoir à gérer les ID des images ..une fois celle ci fermée
Code : Tout sélectionner
UseJPEGImageDecoder()
If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
ImageGadget(0,0,0,500,300,0)
PbIdImage = LoadImage(#PB_Any, "téléchargement.jpg")
If PbIdImage
LargeurImageGrid = 110
HauteurImageGrid = 110
LargeurImageBase = ImageWidth(PbIdImage)
HauteurImageBase = ImageHeight(PbIdImage)
PbIdImageFond = CreateImage(#PB_Any, LargeurImageGrid, HauteurImageGrid)
StartDrawing(ImageOutput(PbIdImageFond))
Box(0, 0, LargeurImageGrid, HauteurImageGrid, RGB(217, 248, 207))
If LargeurImageBase > HauteurImageBase
Coef.f = LargeurImageGrid / LargeurImageBase
HauteurImage = HauteurImageBase * Coef
LargeurImage = LargeurImageGrid
ResizeImage(PbIdImage, LargeurImage, HauteurImage)
DrawImage(ImageID(PbIdImage), 0, 0)
Else
Coef.f = HauteurImageGrid / HauteurImageBase
LargeurImage = LargeurImageBase * Coef
HauteurImage = HauteurImageGrid
ResizeImage(PbIdImage, LargeurImage, HauteurImage)
DrawImage(ImageID(PbIdImage), 0,0)
EndIf
StopDrawing()
ResizeWindow(0, #PB_Ignore, #PB_Ignore, LargeurImageGrid, HauteurImageGrid)
SetGadgetState(0, ImageID(PbIdImageFond))
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
FreeImage(PbIdImage)
FreeImage(PbIdImageFond)
EndIf
Re: Dessin d'une image dans une autre
Publié : jeu. 08/janv./2015 17:18
par falsam
FreeImage() pourquoi pas et ça fait jolie
Bon ok c'est mieux de le faire. Mais par défault "All remaining images are automatically freed when the program ends."
En français dans le texte :
http://www.purebasic.com/french/documen ... image.html
Re: Dessin d'une image dans une autre
Publié : jeu. 08/janv./2015 17:31
par Kwai chang caine
J'aime bien c'est qu'est jolie
Pour le END, je le savais que FRED il avait pensé à mettre un coups de balais pour rendre les locaux propres

Mais pour les images, je crois qu'elle reste en mémoire...

Bon tant pis

Re: Dessin d'une image dans une autre
Publié : jeu. 08/janv./2015 19:36
par Ar-S
Ne confonds pas fermeture de fenêtre et fermeture de programme.
Tu termines ton prog, je pense que les images sont libérées de la mémoire.
Tu clos une fenêtre de ton programme, s'il y avait une image dedans et que tu l'as chargée, elle reste en mémoire tant que tu ne l'a pas libérée. Tu la chargée dans ton programme pas dans une fenêtre spécifique.
Fred ou d'autres pourront confirmer ou infirmer. Pour ma part je pense que ça fonctionne comme ça.
Re: Dessin d'une image dans une autre
Publié : jeu. 08/janv./2015 22:15
par Kwai chang caine
Oui tu as raison. ..
Sinon le code de microdevweb planterait avec ses freeimage après le closewindow, puisque si on tente de libérer quelque chose qui n'existe plus, ça plante..
Dommage pour moi, et si je la libere avant, j'ai plus de refresh de la fenetre en cas de chevauchement. .
Merci Ars