Page 1 sur 1
Bug? (copie par writedouble) [Résolu]
Publié : ven. 01/juil./2011 16:52
par SPH
Et voila, encore un bug inexplicable. Cette fois ci, c'est avec les readdouble et writedouble. Ce code permet de copier double par double tout un fichier et fini octet par octet. La copie est de la meme taille mais chez moi, il y a dans le fichier un octet qui cloche. Ainsi, cette image :

se copie mal comme ca:
Et chez vous ?
Code : Tout sélectionner
UseJPEGImageDecoder()
file$ = OpenFileRequester("Sélectionnez un fichier","","JPG (.jpg)|*.jpg|All files (*.*)|*.*",0)
If file$
If ReadFile(0, file$)
len=Lof(0)
length = Len/8
Dim p.d(length)
Dim p2.b(8)
For i=0 To length-1
p(i)=ReadDouble(0)
Next
For i=1 To Len-length*8
p2(i)=ReadByte(0)
Next
EndIf
CloseFile(0)
EndIf
CreateFile(0, "d:/000.jpg")
For i=0 To length-1
WriteDouble(0,p(i))
Next
For i=1 To Len-length*8
WriteByte(0,p2(i))
Next
CloseFile(0)
Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 17:13
par SPH
Meme bug sous vista.
Je me demande vraiment ce que vous allez m'inventer

Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 20:36
par G-Rom
je comprends pas ton code :
For i=0 To length-1
WriteDouble(0,p(i))
Next
For i=1 To Len-length*8
WriteByte(0,p2(i))
Next
tu écrit un double puis tu réecris des bytes au mêmes endroit...

Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 20:40
par SPH
G-Rom a écrit :je comprends pas ton code :
For i=0 To length-1
WriteDouble(0,p(i))
Next
For i=1 To Len-length*8
WriteByte(0,p2(i))
Next
tu écrit un double puis tu réecris des bytes au mêmes endroit...

Un fichier peux contenir un nombre non entier de double. Alors on ecrit tous les double et on complete les octets restants
Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 20:43
par SPH
En "long", ca marche :
Code : Tout sélectionner
UseJPEGImageDecoder()
file$ = OpenFileRequester("Sélectionnez un fichier","","JPG (.jpg)|*.jpg|All files (*.*)|*.*",0)
If file$
If ReadFile(0, file$)
len=Lof(0)
length = Len/4
Dim p.d(length)
Dim p2.b(8)
For i=0 To length-1
p(i)=ReadLong(0)
Next
For i=1 To Len-length*4
p2(i)=ReadByte(0)
Next
EndIf
CloseFile(0)
EndIf
CreateFile(0, "d:/000.jpg")
For i=0 To length-1
WriteLong(0,p(i))
Next
For i=1 To Len-length*4
WriteByte(0,p2(i))
Next
CloseFile(0)
Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 20:46
par G-Rom
Un fichier peux contenir un nombre non entier de double. Alors on ecrit tous les double et on complete les octets restants
C'est de la prise de tête, j'ai pas envi de me raclé la soupière ce soir.
Bonne soirée.
Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 21:19
par Le Soldat Inconnu
C'est pas Double qu'il faut prendre, c'est Quad
Code : Tout sélectionner
UseJPEGImageDecoder()
file$ = "5.jpg"
If file$
If ReadFile(0, file$)
len = Lof(0)
length = len / 8
Dim p.q(length)
Dim p2.b(8)
For i = 0 To length - 1
p(i) = ReadQuad(0)
Next
For i = 1 To len - length * 8
p2(i) = ReadByte(0)
Next
EndIf
CloseFile(0)
EndIf
If CreateFile(0, "6.jpg")
For i = 0 To length - 1
WriteQuad(0, p(i))
Next
For i = 1 To len - length * 8
WriteByte(0, p2(i))
Next
CloseFile(0)
EndIf
Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 21:27
par SPH
J'avais essayé mais ca ne marchait pas. Et puisque ton code fonctionne, je me suis appercu que la difference etait la :
Merci
Re: Bug? (copie par writedouble)
Publié : ven. 01/juil./2011 21:44
par Backup
..............