Accueil > > > LIRE LA TAILLE D'UNE IMAGE D'UN FICHIER JPEG (TRÈS RAPIDE)
LIRE LA TAILLE D'UNE IMAGE D'UN FICHIER JPEG (TRÈS RAPIDE)
Information sur la source
Description
petit didacticiel sur le entpete et maker des fichier jpeg. y a plus q"à copier-coller pour améliore grandement la vitesse d'affichage des fichier jpeg. D'habitude il faut 'peindre' 2 images (une pour interroger la taille, l'autre pour l'affichage). Là, y en a s'une est c'est 2 fois plus rapide
Source
- 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
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|