La meilleure technique de compression des données binaires?
J'ai un gros fichier binaire qui représente le canal alpha pour chaque pixel dans une image - 0 transparent, 1 pour autre chose. Ce binaire de données doit être chargé dynamiquement à partir d'un fichier texte, et il serait utile d'obtenir le maximum possible de compression. De-temps de compression ne sont pas majorly important (à moins que nous parlons d'un saut de dire d'une minute à une heure), mais les fichiers doivent être aussi petites que possible.
Méthodes que nous avons essayé jusqu'à présent sont en utilisant le run length encoding, puis un codage de huffman, puis en convertissant les données binaires en base64, et de longueur de course de l'encodage, mais la différenciation entre zéro et un à l'aide de valeurs numériques pour l'un et alphabétique des équivalents de trésorerie pour zéro (semble donner les meilleurs résultats). Cependant, nous nous demandons si il y a une meilleure solution que l'autre de ces que nous approchons d'un point de vue logique, plutôt que de regarder toutes les méthodes possibles.
Asaph +1. Aussi technique de compression qui est "meilleur" dépend beaucoup du type de données avez-vous: imaginez-1 bits des images obtenues par le nivellement d'une photo et d'une capture d'écran.
Ce que @Asaph dit. Il sont parfaitement optimisés et des recherches sur l'image les formats de compression avec l'homme depuis des décennies ou des siècles de travail en eux pour tout type d'image (à savoir JPG pour les photos, et PNG). Ne pas ré-inventer la roue
Le système de décodage de données (Monde fo Warcraft) ne peut pas utiliser les images conventionnelles, nous pourrions utiliser le construit en format de fichier pour les images, mais il n'y a pas de fonctions intégré dans le système de traitement de l'image, et nous avons besoin de faire de la détection de collision sur l'image, de sorte que le binaire de la grille est nécessaire.
Si vous ne pouvez pas utiliser les formats traditionnels, qu'en est juste d'essayer de compresser les données pour voir ce que les économies que vous pouvez obtenir auprès de qui? Je dois admettre que je n'ai jamais développé de quoi que ce soit pour WoW, donc suis pas familier avec ses limites. Un peu de binging mis en place un projet pour VisualStudio qui vous permet de faire des addons WoW (addonstudio.codeplex.com), vous pouvez tirer sur eux un message et demander si ils connaissent des bonnes façons d'améliorer la compression de fichiers pour le jeu.
OriginalL'auteur Jim | 2010-12-04
Vous devez vous connecter pour publier un commentaire.
Comme les bibliothèques externes été pour la question, j'ai créé une solution personnalisée pour cela. Le système utilisé run length encoding (encodage pour compresser les données, puis le RLE des données codées était représenté dans base32 (32 caractères pour l'ensemble des zéros, et l'ensemble correspondant, pour ceux). Cela nous a permis de représenter des fichiers d'environ 5 mo en taille, avec seulement environ 30 KO, sans aucune perte.
La Base de 32 a de sens ici. Vous auriez des schémas de zéros, donc à l'aide de la base de 32 signifie que vous pouvez stocker plus d'informations par chiffre. Donc, si vous aviez 512 zéros, vous pourrait la représenter comme G00. 3 octets au lieu de 512 octets. Mais vous travaillez avec le meilleur des cas ici, donc il n'y a que.
Vous n'avez pas besoin d'exemples de code, il a expliqué tout ce dont vous avez besoin pour construire le présent.
OriginalL'auteur Jim
Je suis d'accord, vous devriez être mieux à l'aide d'un existant prouvé format de l'image. Si vous devez le faire vous-même, vous aurez probablement encore se retrouver avec quelque chose qui est très proche de certains tech.
Je pense que je voudrais stocker combien de fois l'octet suivant est répété
|10|1|1|0|3|1|5|0
Serait de produire des
1111111111011100000
Mais si l'on regarde le présent et l'optimiser sur un octet niveau, vous serait bientôt se que c'est presque exactement ce RLE compresion. Donc, réponse longue fait court, regardez RLE 😉
Bonne chance!
OriginalL'auteur inquam
Découvrez 7-Zip. Il a un très bon taux de compression, souvent un dixième de la taille de zip, et a des liaisons de langage pour de nombreux langages de programmation.
http://www.7-zip.org/sdk.html
OriginalL'auteur Samuel Neff
Il y a quelques tests comparatifs de lossless archiveurs pour la photo les images. Vous pouvez regarder l'un d'entre eux: http://qlic.altervista.org/LPCB.html
Vous voyez qu'il y a des douzaines de ces archiveurs. Pour un usage quotidien, que je recommanderais 7-zip.
OriginalL'auteur Pavel Ruzankin