Classe de lecture de fichier encodées - Approche Objet

Classe de lecture de fichier encodées - Approche Objet - C++ - Programmation

Marsh Posté le 26-07-2003 à 21:21:50    

Voila j'ai besoin de lire un format de fichier image depuis des fichiers disques.
 
Le format est le suivant  
 
HEADER GENERAL :
Nombre de frames (N)
Largeur
Hauteur
CRC
Offset de la 1e frame depuis le debut du ficheir
 
ensuite N headers de frames
 
HEADER DE FRAMES
Offset des données de la frame
Offset de la frame suivante
 
ensuite toutes les données des frames encodées en RLE.
 
Ma question est donc :
 
Quelle est la maniére le plus "object compliant" de coder un lecteur/decodeur de ces ficheirs et de permettre d'ajouter/retirer des frames dans ce ficheir ...
 
J'ai toutes mes fonctions de faites mais je n'arrive pas à trouver une implemenrtationobjet bien propre (autre que le gros objets statiques contenants ttes le sofnctions :/)
 
Mercid 'avance

Reply

Marsh Posté le 26-07-2003 à 21:21:50   

Reply

Marsh Posté le 26-07-2003 à 21:24:18    

tout dépend des tes contraintes. est que tu as la possibilité de tout charger en mémoire et de travailler dessus, ou est ce que tu dois tout faire sur disque, auquel cas ton prauvre objet est juste un gros descripteur avec des méthodes en plus...

Reply

Marsh Posté le 26-07-2003 à 21:27:55    

les fichiers sont rikiki (< 1Mo) et sont chargés en memoire par fichiers mappé.

Reply

Marsh Posté le 26-07-2003 à 21:34:16    

donc t'es quand même du coté du descripteur...
je vois pas ce qu'il y a de crade à manipuler ce genre de chose. pour ma part, j'ai déjà fait ce genre de chose. l'ouverture d'une image avec la création d'un objet remplissez une baterrie de champs, toutes les trames sont en mémoire, et le fichier image refermée. Une sorte de désérialisation en somme, tout décompresser en mémoire pour des manipulations aisées et rapides. Après, des modifications faciles (puisque tout en mémoire). une fonction d'écriture pour déséiraliser et tout remettre en binaire ( j'avais aussi une option au constructeur qui pour demander la mise à jour du fichier original au moment de la destruction). et puis comme une image ça peut etre lourd, des fonctions membre zip/unzip (à base de je sais plus quoi, lzop je crois, fait pour etre tres rapide) pour compresser les trames en mémoire quand on souhaite mettre l'objet de coté par exemple

Reply

Marsh Posté le 26-07-2003 à 21:36:02    

ok ... donc une grosse classe
 
MonFichier avec des methodes load, save, get/set frame etc ...
ca ira ?

Reply

Marsh Posté le 26-07-2003 à 21:40:49    

oui, sans problème. par contre, quand j'ai conçu ma classe, j'étais pas trop pour une méthode load, je préférais associé un ficheir à une image, donc l'unique constructeur prenez un nom de fichier. mais c'est question de gout. Mes méthodes de zip/unzip étaient vraiment sympas et utiles.

Reply

Marsh Posté le 26-07-2003 à 21:43:50    

j'ai pas de methode load non plus, j'ai une serie de classe
qui me permetten d'obtenir un HANDLER sur un fochier quelconque (disque, distant, memoire) à partir d'un ID arbitraire.
 
PAr contre, cette histoire de zip/unzip m'interesse bien ...
des liens, exemples ?

Reply

Marsh Posté le 26-07-2003 à 21:52:16    

ben j'avais utilisé lzo pour sa très très grande rapidité http://www.lzop.org/
 
mais j'avais aussi hésité avec une classe QT http://doc.trolltech.com/3.2/qbytearray.html qui semble assez efficace également. à toi de tester mais bon QT, si t'es sous windows...
 
le problème de tout ça c'est la licence aussi. à toi de voir ce que tu fais, mois j'avais été pleinement satisfait

Reply

Marsh Posté le 26-07-2003 à 22:04:43    

bah c pour un projet perso en Open Source donc LZO devrait suffire non ?
 

Reply

Marsh Posté le 26-07-2003 à 22:08:07    

oui, par contre pour LZO, c'est du C et je me souviens que y avais une méthode init à appeler au démarrage. alors je sais pas si c'est thread_safe. au pire du fais un truc élégant en métant tout dans un singleton synchronisé. mais ça marche du tonnerre, regarde mes benchs
 
tiens, y aussi une version alélgée http://www.oberhumer.com/opensource/lzo/download/


Message édité par Taz le 26-07-2003 à 22:09:37
Reply

Marsh Posté le 26-07-2003 à 22:08:07   

Reply

Marsh Posté le 27-07-2003 à 08:35:16    

C'est du C effectivemnt, mais c threadsafe aussi.
Hmmm un singleton synchronisé ... oui pourquoi pas (encore qu ele terme synchronisé me laisse pantois :?:)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed