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 :
Image
se copie mal comme ca:
Image
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 :mrgreen:

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... 8O

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... 8O
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 :

Code : Tout sélectionner

      Dim p.q(length)
Merci

Re: Bug? (copie par writedouble)

Publié : ven. 01/juil./2011 21:44
par Backup
..............