Page 1 sur 2

[OK] Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 1:31
par Ar-S
Salut,

Je ne comprends pas, j'ai créé une liste d'images et une liste parallele du nom renommé de ces même images.
Au debug les 2 noms apparaissent bien. Mais lorsque je veux sauver l'image c:\1.jpg en c:\min_1.jpg,
le debug me dit que l'#image (en l'occurance la 4) n'est pas initialisée.
Je n'arrive pas à voir pourquoi.

Voilà le code :

Code : Tout sélectionner

;- imaginons que images() contienne c:\1.jpg et c:\2.jpg
; SavImage() contient c:\min_1.jpg et c:\min_2.jpg

extSortie$=".jpg"
ResetList(images()) : ResetList(SavImage())
              While NextElement(images())
                NumNew=SelectElement(SavImage(), ListIndex(images())) 
                Debug "image a traiter : "+images()
                If LoadImage(4, images())
                  Debug "Image chargée : "+images()
                  Limg=ImageWidth(4):Himg=ImageHeight(4)
                  ResizeImage(4,L,H,#PB_Image_Smooth)
                  
                  ;Nom du futur fichier image
                  extSortie$="."+LCase(FormatImage$)
                  NomNew$=Left(SavImage(),Len(SavImage())-4)+extSortie$
                  Debug "Nom de sortie : "+NomNew$
                  
                  ;Sauvegarde
                  If extSortie$=".jpeg" Or extSortie$=".jpg"
                    SaveImage(4,NomNew$,#PB_ImagePlugin_JPEG,taux)
                  Else
                    Debug "ça chie"
                  EndIf

                Else
                  MessageRequester(" ","IMPOSSIBLE DE CHARGER L'IMAGE ")
                EndIf
                
              Wend
J'ai fait un code à part et autonome pour que vous puissiez tester en live,
mais le problème est que lui fonctionne...
J'ai du zapper un truc dans le code original que je n'arrive pas à repérer.

Code fonctionnel :

Code : Tout sélectionner

UseJPEGImageEncoder()
UseJPEGImageDecoder()

NewList ImgSrc.s()
NewList ImgSAV.s()

Global rep$=GetCurrentDirectory()

;Création de 3 images
  For i=1 To 3
    CreateImage(1,100,100,32)
    StartDrawing(ImageOutput(1))
      DrawText(5,25,"IMAGE "+Str(i))
    StopDrawing()
    SaveImage(1,rep$+"image"+Str(i)+".jpg",#PB_ImagePlugin_JPEG,7)
  Next i  
 
; Chargement des images et création des 2 listes
For i=1 To 3
  charge=LoadImage(2,rep$+"image"+Str(i)+".jpg")  
  If charge
    AddElement(ImgSrc())
    ImgSrc()=rep$+"image"+Str(i)+".jpg"
    AddElement(ImgSAV())
    ImgSAV()=rep$+"min_image"+Str(i)+".jpg"
  EndIf
Next i

; Repositionnement des listes avant le 1er element
ResetList(ImgSrc()) : ResetList(ImgSAV())

; traitement, chargement et sauvegarde des nouveaux fichiers
While NextElement(ImgSrc())
  NumNew=SelectElement(ImgSAV(), ListIndex(ImgSrc())) 
  Debug "image a traiter : "+ImgSrc()
  If LoadImage(3, ImgSrc())
    Debug "Image de sortie : "+ImgSAV()
    Limg=ImageWidth(3):Himg=ImageHeight(3)
    ResizeImage(3,300,300,#PB_Image_Smooth)
    
    ;Sauvegarde
    SaveImage(3,ImgSAV(),#PB_ImagePlugin_JPEG,taux)
    
  Else
    MessageRequester(" ","IMPOSSIBLE DE CHARGER L'IMAGE")
  EndIf
  
Wend

MessageRequester(" ","Les images ont été créées (allez vérifier)"+Chr(10)+"Cliquez sur OK pour quitter et effacer les images de ce test")
; On vire les images
ResetList(ImgSrc()) : ResetList(ImgSAV())
While NextElement(ImgSrc())
  NumNew=SelectElement(ImgSAV(), ListIndex(ImgSrc())) 
  DeleteFile(ImgSAV()) : DeleteFile(ImgSrc())
Wend  
End
  

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 8:38
par Jacobus
Je pense que le second code répond car il n'est pas "enfermé" dans des procédures.
Donc pour ton code original je te suggère de créer tes NewList en Global pour qu'elle soient accessibles.
Je ne suis pas chez moi, je ne peux donc pas tester, mais à vue d'oeil....
Exemple:

Code : Tout sélectionner

Global NewList ImgSrc.s()
Global NewList ImgSAV.s()

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 10:51
par MLD
Salut Ar-S

J'ai eu le même problème que toi.
depuis systématiquement je fait comme ceci

Enumeration 2 ;images
#Image_1 = 300
#Image_2 = 301
ect
EndEnumeration

C'est un peu lourd, mais depuis plus de problème notamment dans les procédures. :wink:
Michel

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 11:14
par Ar-S
Merci les gars, j'ai essayé les 2 tips, toujours pareil.
Je m'arrache les cheveux.

Code : Tout sélectionner

SaveImage(#Image,NomNew$,#PB_ImagePlugin_PNG)
blabla #image is not initialized
Je ne comprends vraiment pas car je suis certains que les images se chargent car je debug le if loadimage
et j'obtiens bien dans le debug :
image a traiter : K:\Pics\Bellamy\homebm12-98.jpg
Image chargée : K:\Pics\Bellamy\homebm12-98.jpg ; l'image est chargée !
Nom de sortie : K:\Pics\Bellamy\min_homebm12-98.png ; Le nom de sortie est bien reconnu

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 12:49
par MLD
@Ar-S

Fait bien attention aux numéros des images, Il est possible que comme tu ne force pas les images a prendre un numéro, elle prennent dans tes boucles un numéro de gadget existant. c'est pour cela que je donne toujours a mes images des numéros éloignés de ceux des gadgets du logiciel proprement dit.
N'oublie pas que tu as en fait pour les 4 images de bases quatre autres images réduites donc 8 numéros d'images.
Je travaille actuellement sur un giciel qui comporte environ 30 images plus la modification de certaines de celle-ci par le logiciel, et cela m'arrive d'avoir le même message d'erreur que toi. Ceci provient soit d'une numérotation d'image mauvaise, soit parceque par erreur j'ai utilisé le même numéro pour 2 images différentes.En fait si l'on est pas rigoureux dans le numérotage des images cela devient vite une usine a gaz. :cry:
Michel

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 12:53
par Backup
utilise tu plusieurs enumeration-endenumeration ?

je dis ça car c'est classique de se retrouver avec plusieurs constantes qui se chevauches.

sinon regarde bien tes procedures , tu dois avoir une variables qui reste local
et dont tu te sers a l'exterieur (faire une shared si c'est le cas)

pas évident de t'aider sans le code.. :)

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 16:12
par Ar-S
MLD, J'ai numéroté les différentes #image, même chose :(

Dobro, faut que je regarde, c'est possible même si je ne vois pas trop pourquoi.
je n'utilise pas plusieurs enumeration endenumeration

----edit-----

J'ai essayé en Shared, en donnant aussi un nom non utilisé aux #image traitées dans l'explorer.. pareil..

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 16:54
par MLD
@ Ar-S

Sans les codes de départ.
Numérotation
CatchImage
DataSection
Image0:IncludeBinary
ect
pas facile de t'aider
Michel

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 17:07
par G-Rom
UseJPEG2000ImageEncoder() ?


sinon , profite des maps !
Global NewMap MaListeImage.i()

MaListeImage("Mon Fichier.jpg") = LoadImage(#PB_Any,Mon Fichier.jpg)
Bouffe plus de RAM , mais super rapide à l'exécution , c'est du bonheur !

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 17:41
par Ar-S
G-Rom a écrit :UseJPEG2000ImageEncoder() ?
ba quoi ?
sinon , profite des maps !
Global NewMap MaListeImage.i()
MaListeImage("Mon Fichier.jpg") = LoadImage(#PB_Any,Mon Fichier.jpg)
Bouffe plus de RAM , mais super rapide à l'exécution , c'est du bonheur !
Pour le traitement de moultes images tu penses pas que ce serait problématique si c'est glouton en ram ?

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 18:45
par G-Rom
Ar-S a écrit :
G-Rom a écrit :UseJPEG2000ImageEncoder() ?
ba quoi ?
sinon , profite des maps !
Global NewMap MaListeImage.i()
MaListeImage("Mon Fichier.jpg") = LoadImage(#PB_Any,Mon Fichier.jpg)
Bouffe plus de RAM , mais super rapide à l'exécution , c'est du bonheur !
Pour le traitement de moultes images tu penses pas que ce serait problématique si c'est glouton en ram ?
As tu essayer UseJPEG2000ImageEncoder() ?? car je ne comprends pas ton erreur.
Pour le traitement de moultes images tu penses pas que ce serait problématique si c'est glouton en ram ?
Non , regarde ogre3D , il utilise une grande map pour les ressources , et c'est rapide. j'ai pas dit que cela te boufferais 1go par image.
une map , c'est ni plus ni moins qu'un très grand tableau Dim() à une dimension
les map possèdent des "clé" MaMap("MaCle") , cette clé est transformé en chiffre , par le biais d'un algo que j'ai déjà posté sur le fofo il me semble , par exemple "Ma cle" = 54896 , les infos que tu va rentré seront dispo à l'index 54896 du tableau
Donc tu as un accès direct au données , plus besoin de Foreach / next ou de for/next pour savoir quel données je veut utilisé , c'est très très très pratique , même indispensable , quand ca sera supporté correctement dans les structures , on pourra vraiment faire des trucs de dingue en pb :D !

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 18:59
par Jacobus
Je reviens au code initial, et à tout hasard (n'ayant que peu d'éléments) as-tu donné une valeur à L et H

Code : Tout sélectionner

Limg=ImageWidth(4):Himg=ImageHeight(4)
ResizeImage(4,L,H,#PB_Image_Smooth)
Car dans le code d'exemple ils sont à 300... et Limg et Himg ne sont pas utilisés :!:
Bref, ça va pas être simple de tatonner avec un bout de code.

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 19:01
par Backup
en effet peut avant sa sauvegarde il utilise
en ligne 468
ResizeImage(#ImageAtraiter,L,H,#PB_Image_Smooth)



et si on met cette fonction en commentaire , il n'y a plus de plantage de la sauvegarde !!

c'est donc cette fonction qui fait perdre l'identifiant de l'image !! :)

et effectivement L,H sont a ZERO !!!
et ça risque pas d'etre autrement , ces 2 variables ne sont jamais peuplés !! :lol:

@jacobus on a posté en meme temps :)

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 19:24
par Jacobus
:mrgreen:

Re: Probleme de sauvegarde d'images [SaveImage()]

Publié : lun. 12/avr./2010 19:52
par Ar-S
je vais regarder ça, merci.