Accueil > > > MODULE ZLIB - LA COMPRESSION FACILE... (OU DECOMPRESSION)
MODULE ZLIB - LA COMPRESSION FACILE... (OU DECOMPRESSION)
Information sur la source
Description
Je sais que de telles sources existent déjà sur le site, mais là, ca gère tout en mémoire, sans créer de fichier temporaire.
Ce module permet de compresser/décompresser très facilement vos données depuis et vers des tableaux d'octets.
Source
- Public Function CompressData(ByRef vxbInput() As Byte, ByRef vxbOutput() As Byte, Optional vnStart As Long = 0, Optional vnMaxSize As Long = 0, Optional veCompressionLevel As ZLIB_CompressionLevelConstants = Z_DEFAULT_COMPRESSION) As Boolean
- Dim tStream As zStream
- Dim rc As Long
- Dim xbCopy() As Byte
- With tStream
- '# On initialise les parametres de la structure stream
- If deflateInit(tStream, veCompressionLevel, ZLIB_Version, Len(tStream)) = 0 Then
- CompressData = True
- '# Les données sont a prendre dans le tableau en entrée
- CopyMemory rc, ByVal ArrPtr(vxbInput), 4
- If rc Then
- CopyMemory .avail_in, ByVal rc + 16, 4
- .avail_in = .avail_in - vnStart
- End If
- If .avail_in > 0 And vnStart < .avail_in Then
- '# Doit-on prendre tout le tableau ?
- If vnMaxSize <> 0 And vnMaxSize < .avail_in Then
- .avail_in = vnMaxSize
- End If
- .next_in = VarPtr(vxbInput(vnStart))
-
- '# On regarde ou sont les données du tableau de sortie.
- '# Pas de VarPtr ici car ce tableau peut etre vide, ca évite un On Error ^^
- CopyMemory rc, ByVal ArrPtr(vxbOutput), 4
- If rc Then
- CopyMemory rc, ByVal rc + 12, 4
-
- If rc + vnStart = .next_in Then
- '# Le tableau d'entrée et le tableau de sortie pointent au même endroit...
- '# ca ne va "pas le faire" ...
- xbCopy = vxbInput
- .next_in = VarPtr(xbCopy(vnStart))
- ElseIf vnStart Then
- '# On recopie le début du tableau
- ReDim vxbOutput(vnStart - 1)
- CopyMemory vxbOutput(0), vxbInput(0), vnStart - 1
- End If
- Else
- vxbOutput = vxbInput
- End If
-
- .avail_out = .avail_in + 12
- '# On agrandit le tableau de sortie
- ReDim Preserve vxbOutput(.total_out - 1 + .avail_out + vnStart)
- '# Les nouvelles données décompressées seront placées à la suite, dans le tableau...
- .next_out = VarPtr(vxbOutput(vnStart + .total_out))
-
- '# Lance la décompression a proprement parler
- CompressData = deflate(tStream, 4) = 1
-
- If .total_out Or vnStart Then
- ReDim Preserve vxbOutput(.total_out + vnStart - 1)
- Else
- Erase vxbOutput
- End If
- End If
-
- '# Fin de l'utilisation de ZLib
- deflateEnd tStream
- End If
- End With
- End Function
Public Function CompressData(ByRef vxbInput() As Byte, ByRef vxbOutput() As Byte, Optional vnStart As Long = 0, Optional vnMaxSize As Long = 0, Optional veCompressionLevel As ZLIB_CompressionLevelConstants = Z_DEFAULT_COMPRESSION) As Boolean
Dim tStream As zStream
Dim rc As Long
Dim xbCopy() As Byte
With tStream
'# On initialise les parametres de la structure stream
If deflateInit(tStream, veCompressionLevel, ZLIB_Version, Len(tStream)) = 0 Then
CompressData = True
'# Les données sont a prendre dans le tableau en entrée
CopyMemory rc, ByVal ArrPtr(vxbInput), 4
If rc Then
CopyMemory .avail_in, ByVal rc + 16, 4
.avail_in = .avail_in - vnStart
End If
If .avail_in > 0 And vnStart < .avail_in Then
'# Doit-on prendre tout le tableau ?
If vnMaxSize <> 0 And vnMaxSize < .avail_in Then
.avail_in = vnMaxSize
End If
.next_in = VarPtr(vxbInput(vnStart))
'# On regarde ou sont les données du tableau de sortie.
'# Pas de VarPtr ici car ce tableau peut etre vide, ca évite un On Error ^^
CopyMemory rc, ByVal ArrPtr(vxbOutput), 4
If rc Then
CopyMemory rc, ByVal rc + 12, 4
If rc + vnStart = .next_in Then
'# Le tableau d'entrée et le tableau de sortie pointent au même endroit...
'# ca ne va "pas le faire" ...
xbCopy = vxbInput
.next_in = VarPtr(xbCopy(vnStart))
ElseIf vnStart Then
'# On recopie le début du tableau
ReDim vxbOutput(vnStart - 1)
CopyMemory vxbOutput(0), vxbInput(0), vnStart - 1
End If
Else
vxbOutput = vxbInput
End If
.avail_out = .avail_in + 12
'# On agrandit le tableau de sortie
ReDim Preserve vxbOutput(.total_out - 1 + .avail_out + vnStart)
'# Les nouvelles données décompressées seront placées à la suite, dans le tableau...
.next_out = VarPtr(vxbOutput(vnStart + .total_out))
'# Lance la décompression a proprement parler
CompressData = deflate(tStream, 4) = 1
If .total_out Or vnStart Then
ReDim Preserve vxbOutput(.total_out + vnStart - 1)
Else
Erase vxbOutput
End If
End If
'# Fin de l'utilisation de ZLib
deflateEnd tStream
End If
End With
End Function
Historique
- 24 août 2007 04:16:40 :
- les donnes seront normallement traitées plus vite.
- 24 août 2007 04:31:50 :
- erreur avec le fichier Zip
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Compression [ par eldim ]
Bonjour,Est-ce quelqu'un connait un programme zip qui vérifie si un fichier existe déja dans un zip et compare les versions avant d'ajouter
Algorithme de compression (ZIP RAR ACE....) [ par Fildomen ]
Salutje veux me lancer dans un prog de compression, masi je ne trouve pas de doc, s'il vous plait passez moi un lien sur les algorihmes de n'importe e
Compression / décompression [ par nicolasheurtevin ]
Bonjour, J'ai quelques petits soucis après avoir essayé différents bouts de code permettant la compression zip et la décompressi
Problème Compression zip [ par Taurus67 ]
Bonjour, je fait un petit logiciel qui doit compresser en zip des demos (.dem) ( counter strike ) une fois que celle ci ont fini d'être enregistr
Compression ZIP VB.NET 2003 [ par eldim ]
Bonjour,Je dispose de la class "ICSharpCode.SharpZipLib.Zip" pour compresser mes fichier en VB.NET.Y a-t-il un moyen de vérifier si un fichier ex
Besoin d'aide :/ macro de zip/compression [ par sabrina75017 ]
Bonjour à Tous, Je suis bloquée sur le code d'une macro et là, je déclare forfait de mon côté, j'ai vraiment besoin de votre aide. La situation :
Dézipper fichiers .zip [ par Blodarn ]
Bonjour à tous, Je suis en train de coder un launcher Minecraft pour mon serveur. Celui-ci doit donc télécharger des fichiers mis en ligne avec dropb
Compression dossiers [ par Sentynel ]
Bonjour, cela fait un certain temps que je cherche a pouvoir compresser/decompresser des dossier. Je voudrai pouvoir compresser un dossier contenant
[CS]Erreur dans la page [ par lexsty ]
Bonjour " Il y a eu une erreur dans la page " c'est le message que je reçois quand veux modifier une de mes sources du sîte CodeS-SourceS j'ai respect
Excel - Compression d'images [ par djcoach ]
Bonjour à tous, par vba, j'insère une image, la redimentionne et la positionne. Puis je la compresse à la définition "Site web/écran" : ' _________
|
Derniers Blogs
ASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHEASYNC/AWAIT: COMPRENDRE COMMENT CA MARCHE par fathi
Tout le monde est unanime pour dire que la programmation multi-thread et asynchrone est en train de devenir un sujet incontournable. Beaucoup de choses sont arrivées avec le framework 4 pour le code parallèle (TPL, PLinq,.) et bientôt, on va avoir l...
Cliquez pour lire la suite de l'article par fathi PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS !PAS D'INTELLITRACE SUR MON SITE WEB DANS IIS ! par Etienne Margraff
J'ai récemment eu un problème pour obtenir l'intelliTrace sur un site web dans IIS. Il n'y avait pas de message d'erreur, rien dans le journal d'évènement Windows, et après 3 appels à une voyante, 2 visites chez un marabou, j'ai failli me résign...
Cliquez pour lire la suite de l'article par Etienne Margraff OFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONSOFFICE 365 - SHAREPOINT ONLINE, QUELQUES LIMITATIONS par junarnoalg
De nombreuses entreprises font le choix de SharePoint Online, service fourni au travers de l'offre de Microsoft Office 365. S'il est vrai que ce choix apporte un grand nombre d'avantages; rapidité de mise en ½uvre, disponibilité, large couvertu...
Cliquez pour lire la suite de l'article par junarnoalg PRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGEPRéSENTATION DES API REST DE WINDOWS AZURE : LISTER LES COMPTES DE STORAGE par richardc
http://www.c2idotnet.com/articles/presentation-des-api-rest-de-windows-azure-lister-les-comptes-de-storage
Désolé pour "toto", mais c2i existait avant blogs.developpeur.org et c'est mon site "officiel" ;-) ...
Cliquez pour lire la suite de l'article par richardc
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
|