IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Lecture/ecriture dans un fichier


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut Lecture/ecriture dans un fichier
    Bonjour à tous,

    J'essaye de lire et d'écrire dans un fichier des données mais je n'y parvient pas. Pour les variables basiques, je n'ai aucun problème mais les autres types me compliquent la tache.

    Voici comment je procède pour un string:
    Ecriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       FileStream fs = new FileStream("Datas.dat", FileMode.Create);
       using (BinaryWriter bw = new BinaryWriter(fs))
       {
            bw.Write(MyString);
       }
    Lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       FileStream fs = new FileStream("Datas.dat", FileMode.Open);
       using (BinaryReader br = new BinaryReader(fs))
       {
            MyString = br.ReadString();
       }
    Jusque là pas de soucis ca fonctionne parfaitement.

    Mais qu'en est-il de la lecture/ecriture de variables de type Image?

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Il faut convertir ton image en tableau d'octets, tu pourras le lire / écrire par la suite

    Si l'image est un fichier sur le disque, tu obtiendras le tableau d'octets avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] buffer = File.ReadAllBytes(monFichier);
    Sinon il faudra la sauvegarder dans un MemoryStream et récupérer le tableau ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Image monImage = ...;
    byte[] buffer;
    using (MemoryStream ms = new MemoryStream())
    {
       monImage.Save(ms, ...);
       buffer = ms.ToArray();
    }
    Après tu n'as plus qu'à écrire le buffer dans ton FileStream. A la lecture du FileStream il te faut faire l'opération en sens inverse pour recréer l'objet Image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Image monImage;
    byte[] buffer = ...;
    using (MemoryStream ms = new MemoryStream(buffer))
    {
       monImage = Image.FromStream(ms);
    }

  3. #3
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    Merci.

    Le seul soucis c'est qu'à partir de 15Mo de données, j'en arrive à 100Mo ecrites sur le disque. Apparemment le mémorystream est plus gros que le fichier image d'origine.

    Peut etre que ce dernier ne contiendrait que les données de l'image décompressée?

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    C'est vraissemblablement le cas
    Si tu lis par exemple un Jpeg, l'image en memoire sera forcément décompressée
    Si tu ecrit cette image sous forme de memorystream tu n'y applique aucun algorithme ee compression et tu sauve ce que l'on appelle une image "raw" qui aura la taille du nombre de pixel * le poids d'un pixel (generalement un int 32)

  5. #5
    Membre confirmé Avatar de FraktaL
    Profil pro
    Inscrit en
    Août 2003
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 110
    Par défaut
    Et n'y a t'il aucun moyen d'écrire le contenu d'un mémory stream en lui spécifiant le type de compression?

    Pour l'instant j'obtiens un résultat en sauvegardant mon image sur le disque dans le format que je veux (jpeg) à l'aide de la méthode Save() du contrôle image. Puis, je transfère son contenu dans mon fichier. Cette étape me fait passer de la mémoire au disque, puis du disque à la mémoire, puis de nouveau de la mémoire au disque. Ce n'est pas très optimisé même si c'est assez rapide.

    Il doit bien y avoir un moyen de passer directement de la mémoire au disque en compressant mon mémorystream en jpeg?

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Il me semble que tu peux passer un stream a la methode save de Image

    C'est peut etre une piste a suivre !

Discussions similaires

  1. Lecture ecriture dans un fichier .mat avec C++
    Par WELCOMSMAIL dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/09/2007, 11h29
  2. [IO] lecture ecriture dans un fichier
    Par grabriel dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 05/04/2007, 10h09
  3. probleme lecture ecriture dans des fichiers
    Par xman_genius dans le forum C
    Réponses: 9
    Dernier message: 16/01/2007, 19h50
  4. Lecture ecriture dans un fichier binaire
    Par laetous dans le forum C
    Réponses: 13
    Dernier message: 26/08/2006, 08h50
  5. ouverture/lecture/ecriture dans un fichier en mode binaire
    Par dirty_boy dans le forum Débuter
    Réponses: 2
    Dernier message: 15/03/2006, 08h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo