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

Windows Forms Discussion :

Création de Bitmap et problème de mémoire!


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut Création de Bitmap et problème de mémoire!
    Bonjour!

    J'ai un petit problème technique, j'ai une boucle où il y a création de bitmap que j'enregistre du style, les bitmap sont créés pour enregistrer une image sous une autres dimensions du style (nomImages est une collection possedant des noms d'images):

    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
    16
    17
    18
    19
    20
    21
    22
    23
     
    Bitmap monBitmapIni, monB1,monB2;
    Rectangle rec1,rec2;
    for(int i = 0; i < nomImages.Count; i++)
    {
         monBitmapIni=new Bitmap(nomImages[i].ToString());
         monB1 = new Bitmap(monBitmapIni,100,100);
         monB2 = new Bitmap(monBitmapIni,200,200);
     
         rec1=new rectangle(0,0,monB1.Width,monB1.Height);
         rec2=new rectangle(0,0,monB2.Width,monB2.Height);
     
         monB1.LockBits(rec1, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
     
    monB2.LockBits(rec2, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
     
    monB1.Save(image, System.Drawing.Imaging.ImageFormat.Jpeg);
    monB2.Save(image, System.Drawing.Imaging.ImageFormat.Jpeg);
     
    monB1.Dispose();
    monB2.Dispose();
    monBitmapIni.Dispose();
    }
    merci

  2. #2
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    euh...vous pouvez repeter la question ?


    enfin, surtout, la poser

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    euh.......désolé!

    c'est juste qu'au bout d'un moment visual me met "mémoire insuffisante", sur la création d'un bitmap!
    pourtant je libère bien les ressources de mes System.Drawing.Image!

    voilou

  4. #4
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Je m'y connais pas du tout en manipulation d'images

    est-ce que c'est toujours au bout d'une duree fixe (genre, une dizaine d'images et ca plante), ou toujours sur la meme image ?

    la, comme ca, en regardant le code, je ferais bien un refactoring avec des using..


    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
     
    using (Bitmap monBitmapIni=new Bitmap(nomImages[i].ToString())){
      using (Bitmap monB1=new Bitmap(monBitmapIni,100,100)){
        Rectangle rec1=new rectangle(0,0,monB1.Width,monB1.Height);
        monB1.LockBits(rec1, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
     
        monB1.Save(image, System.Drawing.Imaging.ImageFormat.Jpeg);
      }
      using (Bitmap monB2=new Bitmap(monBitmapIni,200,200)){
        Rectangle rec2=new rectangle(0,0,monB2.Width,monB2.Height);
        monB2.LockBits(rec2, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
     
        monB2.Save(image, System.Drawing.Imaging.ImageFormat.Jpeg);
      }
    }
    Par contre, une question, pourquoi fais tu deux fois un bitmap.save sur le meme stream/fichier ?

    en regardant le code, je ferais meme un extract de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    using (Bitmap monB2=new Bitmap(monBitmapIni,200,200)){
        Rectangle rec2=new rectangle(0,0,monB2.Width,monB2.Height);
        monB2.LockBits(rec2, System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
     
        monB2.Save(image, System.Drawing.Imaging.ImageFormat.Jpeg);
      }
    dans une fonction annexe...DRY

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    En faite j'ai besoin des deux, à la place de "image" j'aurais dû mettre "image1" et "image2"!

    En réalité je prends une image de base et j'en créé deux qui ont chacune leur dimensions et chacune leur dossier distinct!

    Pour ce qui est du pourquoi j'ai réalisé plusieurs tests avec 1500 images de tailles et poids différentes:

    Test 1: avec les 1500==> images blocage à la 993!

    Test 2: coupure entre les images 923 et 1001==>blocage à la 1274!

    Conclusion : possibilité que le blocage soit dû spécifiquement à la 994 et 1275!

    Test 3: coupure entre les images 980 et 1010==>blocage à la 1302!

    Conclusion : les blocages ne sont pas dû à une image spécifique,ni à un nombre d'image car un nombre différents d'image et réussi à chaque tentative avant de bloquer, on peut donc en conclure que les blocages sont dû à la capacité prise par les images....je ne vois pas d'autres explications ^^

    edit: à quoi servira la factorisation?

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 176
    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 176
    Points : 25 118
    Points
    25 118
    Par défaut
    pourquoi tu lockbits ? je vois pas à quoi ca te sert ici ...
    enfin je crois que lockbits nécessite unlockbits, ta fuite mémoire vient peut etre de là ...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 537
    Points : 369
    Points
    369
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    pourquoi tu lockbits ? je vois pas à quoi ca te sert ici ...
    enfin je crois que lockbits nécessite unlockbits, ta fuite mémoire vient peut etre de là ...
    bien vu!

    j'ai viré les lockbits et ça tourne nickel merci!

    je sais même plus ce que ça foutait là, c'est un code qui à neuf mois(je commençais et mettais pas de commentaire)!

    en tout cas merci!

  8. #8
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par NejNej Voir le message
    edit: à quoi servira la factorisation?
    a eviter de devoir maintenir deux fois les memes lignes de code

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/03/2013, 14h28
  2. [Lazarus] Problème lors de création de bitmaps
    Par higishi dans le forum Lazarus
    Réponses: 2
    Dernier message: 03/06/2012, 13h00
  3. Problème de mémoire avec des Bitmap
    Par Ryu2000 dans le forum Android
    Réponses: 11
    Dernier message: 06/04/2012, 11h34
  4. Problème de mémoire avec Bitmap (c++/cli)
    Par bonofred dans le forum Windows Forms
    Réponses: 9
    Dernier message: 21/01/2009, 15h58
  5. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11

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