Dessin d'une image dans une autre (Resolu)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Dessin d'une image dans une autre (Resolu)

Message 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
Dernière modification par Kwai chang caine le ven. 09/janv./2015 8:52, modifié 4 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Dessin d'une image dans une autre

Message 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
~~~~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
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Dessin d'une image dans une autre

Message 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
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Dessin d'une image dans une autre

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Dessin d'une image dans une autre [Résolu]

Message par microdevweb »

Il n'y pas de mal; C'est avec plaisir.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Dessin d'une image dans une autre [Résolu]

Message 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 ??
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Dessin d'une image dans une autre

Message 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 ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Dessin d'une image dans une autre

Message 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

ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Dessin d'une image dans une autre

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Dessin d'une image dans une autre

Message 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:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Dessin d'une image dans une autre

Message 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.
Dernière modification par Ar-S le jeu. 08/janv./2015 23:32, modifié 1 fois.
~~~~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
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Dessin d'une image dans une autre

Message 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
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre