Page 2 sur 2

Re: Lecteur d'images cryptées

Publié : lun. 04/juil./2011 17:13
par SPH
Franchement, j'avais bien cherché sur le net. Mais bon, meme si ca existe, c'est loin d'etre devenu populaire.

Pour le bug, djes, j'aimerais t'y voir moi derriere le debuggeur a traquer ce bug sans logique. Encore un bug qui entrave le chemin de mes reves...

Re: Lecteur d'images cryptées

Publié : lun. 04/juil./2011 17:48
par SPH
Le bug est ici :

Code : Tout sélectionner

*MemoryID = AllocateMemory(length) 
length est d'un certain nombre mais *MemoryID est a zero. Cela veux dire (je crois) que PB n'a pas pu reserver de memoire.
Pourquoi ?

Re: Lecteur d'images cryptées

Publié : lun. 04/juil./2011 18:25
par TazNormand
Quand je teste, j'ai pas de bug d'allocation mémoire.

une idée SPH, aulieu de crypter le fichier image en entier, crypte uniquement les données, gardes les entêtes du format (JFIF...) comme ça le fichier est toujours affichable comme image, mais on ne voit rien que du "brouillage" à l'écran, dans le même style que ce que montre lepiaf31.

Re: Lecteur d'images cryptées

Publié : mer. 06/juil./2011 9:21
par Anonyme2
Salut SPH,

perso je trouve que c'est une bonne idée, je partage assez les remarques de TazNormand.
On est sur un forum d'entraide, alors on essaye d'aider les autres un jour et un autre jour ce sont les autres qui nous aident.

Sur ton problème, si length est non nul et que allocatememory échoue, c'est que la mémoire dispo n'est pas suffisante, c'est ce que dit la doc PB
Si la quantité de mémoire demandée est disponible, *MemoryID contiendra l'adresse de début de la zone mémoire, ou 0 si la zone n'a pu être allouée.
Je te conseille de mettre un test sur *MemoryID en Debug avec l'api microsoft GetLasterror_()

Code : Tout sélectionner

If MemoryID = 0
Debug GetLastError_()
EndIf
ensuite, j'espère que l'erreur correspondra, tu vas sur le site de MS et tu cherches l'explication avec le numéro d'erreur renvoyé par GetLastError_()
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

As-tu l'erreur lorsque tu fais de nombreuses opérations, car je ne trouve jamais de FreeMemory(*MemoryID) dans ton code.
Il est possible que tu alloues beaucoup de fois de la mémoire sans la désallouer.

je te conseille de mettre ceci

Code : Tout sélectionner

 FreeMemory(*MemoryID)
après la ligne

Code : Tout sélectionner

Resultat = CatchImage(#ImageTmp, *MemoryID, length-6)
de la procedure Pc_ChargerImage()

un test sur la variable length serait un plus, c'est pas grand chose.

Code : Tout sélectionner

               If length
                    *MemoryID = AllocateMemory(length)         ; alloue un bloc mémoire de la taille du fichier
A+
Denis

Re: Lecteur d'images cryptées

Publié : mer. 06/juil./2011 11:53
par SPH
Merci denis pour toutes ces astuces. Je les ai essayé mais tot ou tard, PB buggue...
Si tu veux essayer, choisis 3 clés(onglet 3) puis crypte plusieurs images(onglet 2). Ensuite, en gardant tres cles, surf jusqu'a tes images crypté et regarde les(onglet 1) en appuyant sur PAGE UP et PAGE DOWN. Ca marche un moment puis ca plante sans raison...

Re: Lecteur d'images cryptées

Publié : mer. 06/juil./2011 15:02
par djes
Sans avoir testé plus que ça, je pense que tu écrases de la mémoire là, si la taille de l'image n'est pas un multiple de 8 :

Code : Tout sélectionner

;length/8
For i=0 To length Step 8
  q.q=PeekQ(*MemoryID+i)
;          Debug q
           For u=1 To 3
           q!ReadQuad(u)
           If Loc(u)>=Leng(u)
             FileSeek(u,0) 
           EndIf
         Next
         PokeQ(*MemoryID+i,q)
Next

Re: Lecteur d'images cryptées

Publié : mer. 06/juil./2011 15:24
par Anonyme2
Je confirme ce que dit djes.

Avec le purifieur de PB, ça plante sur le PokeQ mais le peekQ doit avoir le même problème.

La boucle For i=0 To length Step 8 doit être fausse car soit on fait :

For i=0 To length - 1

soit on fait

For i=1 To length

Par exemple si tu as 10 octets, c'est soit de 0 à 9, soit de 1 à 10 mais pas de 0 à 10 car là on dépasse de 1 octets la zone

Re: Lecteur d'images cryptées

Publié : mer. 06/juil./2011 16:25
par SPH
Est-ce que ca, ca pourrait arranger les choses :

Code : Tout sélectionner

     *MemoryID = AllocateMemory(length+16)
:?:

Re: Lecteur d'images cryptées

Publié : mer. 06/juil./2011 16:36
par djes
Je pense que oui

Re: Lecteur d'images cryptées

Publié : mer. 06/juil./2011 22:30
par anissa
@SPH

Mise à part l'histoire de FreeMemory(), si les extensions (ci-dessous) sont en majuscule, que va t il se passer?
Je sais que c'est enfantin comme remarque mais ce genre de truc est important à ne pas négliger car en cas de faux résultats, il est rare de se retrouver dans des cas pareils...

Code : Tout sélectionner

If ext$=".bmp" Or ext$=".jpg" Or ext$="jpeg" Or ext$=".png" Or ext$=".tga" Or ext$="tiff"
          Gosub cry         
        EndIf


Hum.. et si ext$=".gif" ???

A part ça bon courage SPH

Re: Lecteur d'images cryptées

Publié : jeu. 07/juil./2011 11:08
par Backup
anissa a écrit :@SPH

Mise à part l'histoire de FreeMemory(), si les extensions (ci-dessous) sont en majuscule, que va t il se passer?
Je sais que c'est enfantin comme remarque mais ce genre de truc est important à ne pas négliger car en cas de faux résultats, il est rare de se retrouver dans des cas pareils...
je repond a la place de SPH ... :)

certe un simple

Code : Tout sélectionner

If lcase(ext$)=".bmp" Or lcase(ext$)=".jpg" Or lcase(ext$)="jpeg" Or lcase(ext$)=".png" Or lcase(ext$)=".tga" Or lcase(ext$)="tiff"
          Gosub cry         
        EndIf


va regler ce probleme mais ... a ta question :
Hum.. et si ext$=".gif" ???
ben c'est simple la condition if n'est pas verifié .. donc, ... on s'en fout ;)
ça reviens a dire que les Gif ne seront pas pris en compte....
mais concernant la relation de Purebasic avec les Gif (hein..KCC ? ) , ben c'est pas grave

Re: Lecteur d'images cryptées

Publié : jeu. 07/juil./2011 12:58
par Kwai chang caine
Dobro a écrit :mais concernant la relation de Purebaic avec les Gif (hein..KCC ? ) , ben c'est pas grave
Et tu trouves ça drole :? :lol: