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 :oops:

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 !!! :twisted:

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 :mrgreen:

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 :lol: Ca m'arrive tous le temps
Autre chose, attention à

Code : Tout sélectionner

HauteurImage = HauteurImageBase * Coef
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 :lol:

@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 :wink: :lol:
Mais parce que comme à chaque fois que je demande un coup de main...c'est à dire presque tout le temps :mrgreen: :oops:
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 8)

@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.... 8)

Avec mes conneries de gridgadget tout "pourite"...j'ai retardé ton supergridgadget à toi, je vais donc essayer d'être sage à partir de maintenant :mrgreen:
Tu va me dire utiliser de la "Flotte" en période de noël, c'est quand même être sage non ??? :mrgreen: :lol:

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 :D

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 :lol:
Pour le END, je le savais que FRED il avait pensé à mettre un coups de balais pour rendre les locaux propres :mrgreen:
Mais pour les images, je crois qu'elle reste en mémoire... :(
Bon tant pis :wink:

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