0/5 (4 avis)
Vue 8 961 fois - Téléchargée 847 fois
using System; using System.Windows.Forms; //Application using System.IO; //Directory et Path using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; public class resize { public static void Main() { //Ce programme redimensionne toutes les images du dossier //This program resize all pictures in the directory //csc resize.cs and GO ! //Have fun ! // http://vince.monkeyz.eu int coeff; Console.Write("Diviser la taille par : "); string res = Console.ReadLine(); try { coeff = int.Parse(res); //conversion en entier } catch { coeff = 2; //valeur par défaut } string tab_ext = ".jpg.jpeg.png.bmp.gif.tiff"; //Extensions authorisée string[] files = Directory.GetFiles(Application.StartupPath); //Liste des fichiers du dossier foreach (string file in files) { //file = 1 image string ext = Path.GetExtension(file).ToLower(); if (tab_ext.Contains(ext)) //extension valide ? Resize(file, coeff, ext); else Console.WriteLine(file + " : fichier invalide"); } Console.Write("Done"); Console.ReadKey(); } public static void Resize(string name, int coeff, string ext) { //Ouverture de l'ancienne image FileStream fs = new FileStream(name, FileMode.Open, FileAccess.Read); Bitmap old = (Bitmap)Bitmap.FromStream(fs); fs.Close(); int destWidth = old.Width / coeff; int destHeight = old.Height / coeff; Bitmap img = new Bitmap(destWidth, destHeight, old.PixelFormat); //Nouvelle image, nouvelle largeur/hauter, ancien PixelFormat using (Graphics g = Graphics.FromImage((Image)img)) { g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(old, 0, 0, destWidth, destHeight); } //nota : g.Dispose(); string path = Application.StartupPath + "\\mini-" + Path.GetFileName(name); // save path (mini-...jpg) ImageFormat imgfmt; if (ext == ".bmp") imgfmt = ImageFormat.Bmp; else if (ext == ".gif") imgfmt = ImageFormat.Gif; else if (ext == ".png") imgfmt = ImageFormat.Png; else if (ext == ".tiff") imgfmt = ImageFormat.Tiff; else imgfmt = ImageFormat.Jpeg;//Defaut img.Save(path, imgfmt); } }
31 janv. 2010 à 18:23
J'ai lu l'article et je n'avais pas pensé aux comptes limités, mais je laisse comme c'est, je pense que ça reste facile à changer.
30 janv. 2010 à 19:13
- Le ctor Bitmap(int width, int height, PixelFormat format) specifie le format et le ctor Bitmap(Image original, Size newSize) s'occupe de la copie tout seul mais definit le format lui même.
- C'est une remarque d'ordre général car le programme peut avoir été installé par un soft ou par un administrateur.
http://blogs.codes-sources.com/coq/archive/2006/02/26/enregistrement-de-param-tres-sauvegardes-etc-en-winform.aspx
30 janv. 2010 à 17:55
Que penses tu de ce bout de code à rajouter au dessus du using ?
BitmapData d = old.LockBits(new Rectangle(0, 0, old.Width, old.Height), ImageLockMode.ReadOnly, old.PixelFormat);
Bitmap b = new Bitmap(destWidth, destHeight,d.Stride, old.PixelFormat, d.Scan0);
old.UnlockBits(d);
Ca permet de garder le PixelFormat orginal.
Pour la première remarque, je ne suis pas sûr de comprendre; l'utilisateur place le programme dans un dossier dans lequel il peut écrire, et donc le programme aussi, non ?
30 janv. 2010 à 02:55
- Attention au constructeur Bitmap( int, int ) qui créer une image au format 32bppArgb ce qui n'est pas forcement le même format que l'image originale.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.