Problème de récursivité...

Résolu
buen37 Messages postés 6 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 12 juillet 2009 - 28 nov. 2008 à 15:06
buen37 Messages postés 6 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 12 juillet 2009 - 28 nov. 2008 à 15:26
Bonjour tout le monde,

je présente rapidement mon problème :
j'essaye d'effectuer un traitement lourd sur une série de photos (se trouvant dans un dossier choisi par l'utilisateur) à l'aide d'un backgroundWorker.
Ma récursivité fonctionne au début, par exemple s'il y'a 10 fichiers, elle fera bien 10 -> 9 > 8... jusqu'à 0 (indice de départ de mon tableau de fichiers).
Le traitement de la se fait bien sur mon premier fichier, mais c'est comme si le fonction ne dépilait pas... elle traite uniquement la première photo :(

Voici le code, si quelqu'un peut y jeter un coup d'œil...Moi je vois pas l'erreur...
private void Treatment(int i, int max, BackgroundWorker worker, DoWorkEventArgs e)
        {
            
            //Console.Out.WriteLine("i : {0} / max : {1}", i, max);
            if (worker.CancellationPending)
            {
                e.Cancel = true;
            }
            else
            {
           
                if (i <= 0 )
                {
                    int pourcent = (int)(((double)i) / (double)max * 100);
                    
                    worker.ReportProgress(pourcent);
                    Console.Out.WriteLine("Traitement photos : {0}", i);
                    //traitement
                    if (files[i].Extension.ToLower().Equals(".jpg") || files[i].Extension.ToLower().Equals(".jpeg"))
                    {
                        Boolean ok = true;
                        //image source
                        Image source = Image.FromFile(files[i].FullName, true);

                        //logo
                        Image logo = Image.FromFile(textBox3.Text, true);
                        
                        //création de la font
                        Font f = new Font("Eras Bold ITC", tailleFont);
                        if (f == null)
                            f = new Font("Arial", tailleFont);
                        if (source null || logo null)
                            ok = false;
                        // Création d'un bitmap temporaire a la taille du premier gif (supposé etre plus grand que le second)
                        Bitmap temp = new Bitmap(source.Width, source.Height);
                        //On récupere l'objet Graphics de l'image temporaire
                        Graphics g = Graphics.FromImage(temp);
                        // On dessine la premiere image sur l'image temporaire (avec son objet Graphics)
                        g.DrawImage(source, 0, 0);

                        // Idem avec la seconde image, mais celle ci est centrée
                        g.DrawImage(logo, 0, (source.Height - logo.Height), logo.Width, logo.Height);
                        //on rajoute le texte

                        g.DrawString("Unité de pathologie du bétail", f, new SolidBrush(Color.White), logo.Width + 20, (source.Height - (logo.Height / 2) - (tailleFont / 2)));
                        // On libere les ressources
                        g.Dispose();
                        //Et on fini par sauver l'image temporaire, au format jpg
                        //donc on créé le dossier de destination
                        if (!Directory.Exists(textBox2.Text))
                            Directory.CreateDirectory(textBox2.Text);
                        if (File.Exists(textBox2.Text + "\" + files[i].Name))
                            File.Delete(textBox2.Text + "\" + files[i].Name);
                        temp.Save(textBox2.Text + "\" + files[i].Name, System.Drawing.Imaging.ImageFormat.Jpeg);
                        Boolean enr = File.Exists(textBox2.Text + "\" + files[i].Name);

                        //on libere les images
                        temp.Dispose();
                        logo.Dispose();
                        source.Dispose();

                        //ajout à une des 2 listBox
                        if (!enr || !ok)
                            echecs.Add(files[i].Name);
                        if (enr &amp;&amp; ok)
                            reussies.Add(files[i].Name);
                    }
                    else
                    {
                        echecs.Add(files[i].Name);
                    }
                }
                else
                {
                    Treatment(i - 1, max, worker, e);
                }  
            }
        }

1 réponse

buen37 Messages postés 6 Date d'inscription lundi 20 février 2006 Statut Membre Dernière intervention 12 juillet 2009
28 nov. 2008 à 15:26
Problème résolu, désolé pour le dérangement
3
Rejoignez-nous