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 :

[C#]Album de photo


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut [C#]Album de photo
    Bonjour,

    J'ai fait un petit programme qui permet de regarder des photos et de leur appliquer des traitements basique. Mais j'ai quelques question de conception.

    1. Pour le moment j'utilise une class qui contient mon image, sa taille et son état (en fonction des traitements). Donc lorsque j'ouvre une image je crée un nouvel objet de ma class, et les champs correspondant reçoivent les valeur. Chaque objet est alors placé dans un ArrayList pour pouvoir les faire défiler. J'aimerais savoir si il y a un meilleur moyen pour stocker les images en mémoire car si j'ouvre un répertoire qui contient 100 images ca doit prendre des ressources énormes.

    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
    24
    25
    26
    27
    28
    29
    30
     
    class Photo
            {
                Bitmap img;
                string etatimg;
                bool flag;
                string size;
    };
     
             Photo pt;  //Instance de la class Photo  
            ArrayList photo = new ArrayList();  //Liste qui va contenir toutes les photos selectionées
     
            private void bmOpen_Click(object sender, EventArgs e)
            {
                DialogResult dres = ofd.ShowDialog();
                if (dres == DialogResult.OK)
                {
                    //pBox.Image = new Bitmap(ofd.FileName);
                    Bitmap bp;  //Permet de récupérer les dimensions de la nouvelle image ajoutée dans la liste
                    pt = new Photo((bp = new Bitmap(ofd.FileName)), "Normal", false, (bp.Width + "x" + bp.Height));
                    photo.Add(pt);  //Ajoute l'image à la suite dans la liste
                    if (inpBox == false)    //Si aucune image dans la pBox
                    {
                        pBox.Image = pt.getImage();  //Affiche l'image dans la Picture Box
                        tsEtatImage.Text = pt.getEtat();  //Affiche l'état de l'image
                        tsDimension.Text = pt.getSize();  //Affiche les dimensions de l'image
                        inpBox = true;  //Indique qu'une image se trouve dans la pBox
                    }
                }
            }
    2. J'aimerais savoir comment faire une pause pour le diaporama avec les Threads. J'ai essayé en créant un objet Thread puis j'ai mit thread.sleep(1000) dans ma fonction diaporama mais la pause bloque tout le programme pendant 5 secondes puis mer end la main alors que j'aimerais une pause entre chaque image et que l'heure ne se bloque pas aussi

    3.Est il possible d'appliquer un filtre pour une OpenFolderDialog() ??

    Merci
    Bonne soirée

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Déjà si t'es e n Framework 2.0 je peux te proposer d'éviter les ArrayList et d'utiliser plutot les listes génériques. C'est aussi simple d'utilisation et ça t'évite de devoir "caster" à chaque fois que tu souhaite accéder à un objet de la liste.

    Ensuite dans ta fonction bmOpen_Click tu transformes le fichier que tu veux ouvrir en bitmap avec bp = new Bitmap(ofd.FileName). Et si le fichier que tu veux ouvrir n'est pas un image, que va-t-il se passer ? Il va y avoir une erreur, il faudrait donc mettre tout ça à l'interieur d'un bloc try / catch.


    Pour l'OpenFileDialog
    Code C# : 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
     
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.CheckFileExists = true;
    openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
    openFileDialog.Filter = "Fichiers image png(*.png)|*.png|All Files (*.*)|*.*";
    if (openFileDialog.ShowDialog(this) == DialogResult.OK)
    {
        try
        {
              string FileName = openFileDialog.FileName;          
              if (FileName != null)
              {
                 //mettre ici le traitement
              }
        }
        catch(Exception)
        {
            MessageBox.Show("Erreur lors du chargement de l'image", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

    Concernant le diaporama, tout depend de comment tu t'y prend. Le plus simple pourrait etre de faire un timer qui fait defiler les images. Tu peux facilement le mettre en pause sans devoir toucher aux Threads.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Oui mais comme tu appliques un filtre à l'OpenFileDialog(), il n'ouvrira que les fichiers filtrés non, je ne comprend pas trop l'interet d'un try/catch.

    Merci

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Par défaut
    Certes, mais rien ne t'empeche d'ajouter l'extension .png à un fichier qui n'en est pas un...
    Faut toujours mettres des try/catch quand tu lis des fichiers, tu sais pas ce qui peut arriver. Tu peux aussi ne pas avoir le droit de lecture dessus...
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Ok merci.
    Mais concernant la pause j'ai quelques problèmes. J'ai suivi l'exemple dans MSDN mais il saute certaines images.
    Je posterais le code ce sera plus simple.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Voici le code qui devrait faire une pause de 5 seconde :
    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
    24
     
    #region Diaporama
            private void bDiaporama_Click(object sender, EventArgs e)
            {
                if (index < photo.Count)
                {
                    pt = (Photo)photo[index];
                    pBox.Image = pt.getImage();
                    timerDiaporama.Enabled = true;
                }
                else
                {
                    timerDiaporama.Enabled = false;
                }
            }
     
            private void timerDiaporama_Tick(object sender, EventArgs e)
            {
                timerDiaporama.Tick += new EventHandler(bDiaporama_Click);
                timerDiaporama.Interval = 5000;
                timerDiaporama.Start();
                index++;
            } 
            #endregion
    le code fonctionne mais je croit m'être compliquée la vie pour rien.

    Merci

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/05/2014, 08h48
  2. Albums photos et pagination
    Par mael94420 dans le forum ASP
    Réponses: 5
    Dernier message: 21/06/2006, 14h59
  3. [C++/MFC]Application Album Photo
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 29/05/2006, 11h18
  4. Album photos
    Par mael94420 dans le forum ASP
    Réponses: 1
    Dernier message: 06/05/2006, 17h30

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