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 :

Stockage de pixels avec la sérialisation


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Stockage de pixels avec la sérialisation
    Bonjour,

    Je vous expose mon problème.
    Je dois stocker des pixels (en l'occurence ceux qui sont coloriés sur une pictureBox mais là n'est pas la question) mais ces pixels doivent être associés à une date. Dans ce cas là, la structure que j'ai faite est :
    public class PixelStorage
    {
    private int _x;
    private int _y;
    private DateTime _date;

    [accesseurs]
    [méthodes]
    }

    Le problème qui se pose c'est que lors de la sérialisation, je me retrouve pour chaque pixel avec un paté de ce genre :
    <PixelStorage>
    <Date>2007-08-29T16:05:31.9372257+02:00</Date>
    <X>187</X>
    <Y>175</Y>
    </PixelStorage>
    Ce qui fait quand même assez lourd pour stocker UN pixel \: J'ai essayé de le stocker sous la forme de Dictionary<int, Dictionary <int, DateTime>> mais apparement la déserialisation n'aime pas les List<List<object>> :S

    Si quelqu'un a une solution à me proposer, je suis prenant (= Merci d'avance.
    Bonne journée.

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Pour gagner (un peu) de place, sauvegarde les ticks de ta date.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Pour gagner (un peu) de place, sauvegarde les ticks de ta date.
    lol


    sinon au lieu de stocker des dates par pixel, peut etre que l'inverse, des pixels par date, ca prendrait un peu moins
    enfin je veux dire par là que pour une date (ou le nombre de ticks ) vous devez bien avoir plusieurs pixels

    enfin en quoi ca vous gène que ca prenne de la place ?
    deja l'xml pour pas prendre de place, c'est pas forcément un bon choix, ta date qui est codée sur 8 octets ca te la fais prendre plus de 40 octets ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    lol

    sinon au lieu de stocker des dates par pixel, peut etre que l'inverse, des pixels par date, ca prendrait un peu moins
    enfin je veux dire par là que pour une date (ou le nombre de ticks ) vous devez bien avoir plusieurs pixels

    enfin en quoi ca vous gène que ca prenne de la place ? (deja l'xml pour pas prendre de place, c'est pas forcément un bon choix ...)
    Et bien, le problème c'est que j'ai plusieurs blocs de pixels de ce genre à enregistrer venant de plusieurs images différentes.

    Pour le stockage de pixels par date, cela me semble une bonne idée mais on en revient au problème du stockage qui ressemblerait dans ce cas à Dictionary<DateTime, Dictionary<int, int>>. C'est effectivement plus joli mais toujours pas sérialisable je pense :S

    Le stockage en XML est la solution que j'ai retenue pour le stockage en local, le stockage en distant se faisant en SQL.

    Merci pour les idées Je suis toujours prenant s'il y a d'autres idées (=

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pour le stockage en local il peut y avoir plein de possibilités
    une base access déjà, ca ne nécessite rien pour l'utiliser
    ou un fichier texte avec un codage existant ou que vous créez ... (genre en binaire date entrée x entrée y entrée , ce qui fait 20 octets/caractères par pixel)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre habitué Avatar de akecoocoo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2004
    Messages : 78
    Points : 146
    Points
    146
    Par défaut
    tu peux sérialiser en binaire aussi... moins de blahblah...

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Si tu tiens vraiment à le faire en XML, mais que tu veut que ça prenne un peu moins de place, tu peux faire ça :
    - Ajoute l'attribut XmlIgnore aux accesseurs de X, Y et Date
    - Crée une nouvelle propriété PixelDescriptor qui va représenter les attributs d'un pixel de façon plus compacte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
            public string PixelDescriptor
            {
                get
                {
                    return string.Format("{0};{1};{2}", _x, _y, _date.Ticks);
                }
                set
                {
                    string[] parts = value.Split(';');
                    _x = int.Parse(parts[0]);
                    _y = int.Parse(parts[1]);
                    _date = new DateTime(long.Parse(parts[2]));
                }
            }
    - Tu peux eventuellement changer le tag XML utilisé pour PixelDescriptor, en l'appelant P par exemple (pour faire plus court) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [XmlElement("P")]
    public string PixelDescriptor
    ...
    Ca te donnera un résultat comme ça :
    <PixelStorage>
    <P>70;930;633240066202857823</P>
    </PixelStorage>

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci tomlev, ca m'aide déjà beaucoup. Je ne connaissais pas cette technique de formater et de spliter après... J'aime bien ^^

    Je rechercherai en fait un moyen de stocker les pixels, autrement que un par un car effectivement... Ca prend beaucoup de place \:
    Je voulais stocker par date mais j'ai toujours le problème que Dictionary<DateTime, List<Point>> n'est pas sérialisable... Si quelqu'un a une idée pour me rendre ca sérialisable aussi. Merci d'avance (:

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 109
    Points : 120
    Points
    120
    Par défaut
    Dictionnary n'est pas serialisable en Xml. Une astuce est d'utiliser des jagged array mais tu perds l'avantage des generiques.
    En binaire par contre tu n'as pas ce problème.

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Le plus simple est quand même de stocker les données en CSV... par exemple :
    70;930;633240066202857823
    95;156;633240066202858423
    ...

    là il n'y a rien de superflu

  11. #11
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un peu de superflus quand meme, stocker un nombre en binaire ou en caractères ca change un peu quand meme ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    oui, mais l'avantage de CSV ou XML c'est que c'est lisible et que tu peux le modifier à la main...
    quoique les timestamps en Ticks c'est pas très lisible... il vaudrait peut-être mieux utiliser la forme YYYYMMDDhhmmss, qui ne prend pas plus de place d'ailleurs

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour à tous,
    La technique que j'ai retenue est donc un stockage de ce type là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <PS>
      <P>123;547;549;633240852172369192</P>
    </PS>
    Avec X la ligne, Y1 le point de départ, Y2 le point de fin et la date... DOnc un stockage en lignes...C'est la solution qui m'a parue la plus légère et qui passe à la sérialisation. J'ai essayé la sérialisation binaire et bizarrement ca ne prends pas énormement moins de place que ca.
    En tout cas merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. stockage des messages avec thunderbird
    Par jackk dans le forum Thunderbird
    Réponses: 5
    Dernier message: 08/03/2009, 11h15
  2. probleme de stockage de données avec un ByteArrayOutputStream
    Par nonoRedDevils dans le forum Java ME
    Réponses: 7
    Dernier message: 28/02/2007, 10h56
  3. Manipulation de pixel avec Tcanvas
    Par spyk dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/04/2006, 12h29
  4. Coordonnées de pixel avec glsl
    Par nodar3 dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/02/2006, 11h23
  5. Afficher une buffer de pixel avec Direct3D
    Par Black_Daimond dans le forum DirectX
    Réponses: 4
    Dernier message: 27/12/2002, 22h18

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