buen37
Messages postés6Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention12 juillet 2009
-
28 nov. 2008 à 15:06
buen37
Messages postés6Date d'inscriptionlundi 20 février 2006StatutMembreDernière intervention12 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 && ok)
reussies.Add(files[i].Name);
}
else
{
echecs.Add(files[i].Name);
}
}
else
{
Treatment(i - 1, max, worker, e);
}
}
}