- Private Sub Dir1_Change()
- File1.Path = Dir1.Path
- End Sub
-
- Private Sub Drive1_Change()
- Dir1.Path = Drive1.Drive
- End Sub
-
-
-
- Private Sub File1_Click()
- Dim hauteur As Variant
- Dim largeur As Variant
- Dim image As String
- Dim a0 As Byte
- Dim a1 As Byte
- Dim a10 As Long
-
- If File1.ListCount > 0 Then
-
- For i = 0 To File1.ListCount - 1
- If File1.Selected(i) Then
- If Right(File1.Path, 1) <> "\" Then
- image = File1.Path & "\" & File1.List(i)
- Else
- image = File1.Path & File1.List(i)
- End If
- End If
- Next i
- End If
-
-
- ' ouverture du fichier
- ' c'est 5 car dans mon autre source 1 et 2 était pris
- Open image For Binary As #5 Len = 1024
-
- ' les markers sont de type FFXX suivi de 2 octets, sa taille
- ' on trouve normalement
- ' en 1 : FFD0 le SOI marker, sa taille est donc en octet 3
- ' en 2 FFE0 (jfif marker)
- ' ensuite FFDB(quantizise)/FFEC(?)/FFEE(commentaire)
- ' enfin le FFCx (avec x=0,1,2,3,5,6,7,9,a,b,d,e,f) les autes sont pas bons
- ' c'est le début de l'image, ke x, c'est le début de codage
- ' puis FFC4 (table de huffman) et le FFDA (start odf scan)
- ' et à la fin FFD9 : fin d'image
- ' le nombre de marker est variable, donc fo chercher
- Get #5, 1, a0
- Get #5, 2, a1
- ' vérification de l'entête, le jpg c'est FFD8
- If (a0 = 255 And a1 = 216) Then
- a10 = 3
- For i = 1 To 10
- ' a10 pointe sur l'entête du marker
- ' la boucle limitée à 10 recherches permet que ça plante pas sur 'EOF' dès qu'un fichier est pas bon
- Get #5, a10, a0
- Get #5, a10 + 1, a1
- If (a1 = 192 Or a1 = 193 Or a1 = 194 Or a1 = 195 Or a1 = 197 Or a1 = 198 Or a1 = 199 Or a1 = 201 Or a1 = 202 Or a1 = 203 Or a1 = 205 Or a1 = 206 Or a1 = 207) Then
- ' par exemple FF C0 00 11 08 05 E0 03 E8
- ' FF C0 : début de frame
- ' 00 11 : la taille de ce marker (17 octets), a10 pointe sur 00
- ' 08 : P (sample precision = 8 quasi toujours)
- ' 05 E0 : Y (hauteur)
- ' 03 E8 : X (laurgeur)
- Get #5, a10 + 5, a0
- Get #5, a10 + 6, a1
- ' a10 et hauteur sont de long, a1 et a2 des bytes
- ' le & permet de pas générer d'erreur en dessus de 32736
- ' le calcul se fait en long comme ça au lieu de interger par défaut
- hauteur = 256& * a0 + a1
- Get #5, a10 + 7, a0
- Get #5, a10 + 8, a1
- largeur = 256& * a0 + a1
- i = 20
- 'MsgBox ("H=" + Str(hauteur) + "- L=" + Str(largeur))
- End If
- Get #5, a10 + 2, a0
- Get #5, a10 + 3, a1
- ' a10 : ancien offset
- ' a0*256+a1 : offset du à la taille du marker
- ' et le 2, c'est l'offset pour la taille de l'entête du marker FFXX
- a10 = 2& + a10 + a0 * 256& + a1
- Next i
- Label1 = "H=" + Str(hauteur) + " - L=" + Str(largeur)
- Else
- Label1 = "En tête non standard" + Str(a0) + Str(a1)
- End If
- Close #5
- ' si i= 11, pas de frame valide trouvée
- ' si i=21, frame valide touvée
-
-
- If (i = 11) Then
- Label1 = "pas de frame valable trouvée ou plus de 10 marker"
- End If
-
-
- End Sub
-
-
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub File1_Click()
Dim hauteur As Variant
Dim largeur As Variant
Dim image As String
Dim a0 As Byte
Dim a1 As Byte
Dim a10 As Long
If File1.ListCount > 0 Then
For i = 0 To File1.ListCount - 1
If File1.Selected(i) Then
If Right(File1.Path, 1) <> "\" Then
image = File1.Path & "\" & File1.List(i)
Else
image = File1.Path & File1.List(i)
End If
End If
Next i
End If
' ouverture du fichier
' c'est 5 car dans mon autre source 1 et 2 était pris
Open image For Binary As #5 Len = 1024
' les markers sont de type FFXX suivi de 2 octets, sa taille
' on trouve normalement
' en 1 : FFD0 le SOI marker, sa taille est donc en octet 3
' en 2 FFE0 (jfif marker)
' ensuite FFDB(quantizise)/FFEC(?)/FFEE(commentaire)
' enfin le FFCx (avec x=0,1,2,3,5,6,7,9,a,b,d,e,f) les autes sont pas bons
' c'est le début de l'image, ke x, c'est le début de codage
' puis FFC4 (table de huffman) et le FFDA (start odf scan)
' et à la fin FFD9 : fin d'image
' le nombre de marker est variable, donc fo chercher
Get #5, 1, a0
Get #5, 2, a1
' vérification de l'entête, le jpg c'est FFD8
If (a0 = 255 And a1 = 216) Then
a10 = 3
For i = 1 To 10
' a10 pointe sur l'entête du marker
' la boucle limitée à 10 recherches permet que ça plante pas sur 'EOF' dès qu'un fichier est pas bon
Get #5, a10, a0
Get #5, a10 + 1, a1
If (a1 = 192 Or a1 = 193 Or a1 = 194 Or a1 = 195 Or a1 = 197 Or a1 = 198 Or a1 = 199 Or a1 = 201 Or a1 = 202 Or a1 = 203 Or a1 = 205 Or a1 = 206 Or a1 = 207) Then
' par exemple FF C0 00 11 08 05 E0 03 E8
' FF C0 : début de frame
' 00 11 : la taille de ce marker (17 octets), a10 pointe sur 00
' 08 : P (sample precision = 8 quasi toujours)
' 05 E0 : Y (hauteur)
' 03 E8 : X (laurgeur)
Get #5, a10 + 5, a0
Get #5, a10 + 6, a1
' a10 et hauteur sont de long, a1 et a2 des bytes
' le & permet de pas générer d'erreur en dessus de 32736
' le calcul se fait en long comme ça au lieu de interger par défaut
hauteur = 256& * a0 + a1
Get #5, a10 + 7, a0
Get #5, a10 + 8, a1
largeur = 256& * a0 + a1
i = 20
'MsgBox ("H=" + Str(hauteur) + "- L=" + Str(largeur))
End If
Get #5, a10 + 2, a0
Get #5, a10 + 3, a1
' a10 : ancien offset
' a0*256+a1 : offset du à la taille du marker
' et le 2, c'est l'offset pour la taille de l'entête du marker FFXX
a10 = 2& + a10 + a0 * 256& + a1
Next i
Label1 = "H=" + Str(hauteur) + " - L=" + Str(largeur)
Else
Label1 = "En tête non standard" + Str(a0) + Str(a1)
End If
Close #5
' si i= 11, pas de frame valide trouvée
' si i=21, frame valide touvée
If (i = 11) Then
Label1 = "pas de frame valable trouvée ou plus de 10 marker"
End If
End Sub