图片批量改尺寸

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using System.IO;
 10 using System.Threading;
 11 
 12 namespace WindowsFormsApplication1
 13 {
 14     public partial class Form1 : Form
 15     {
 16 
 17         public delegate void MyInvoke(object str);
 18 
 19         public Form1()
 20         {
 21             InitializeComponent();
 22         }
 23 
 24         public void setProgress(object iValue ) 
 25         {
 26             if( progressBar1.InvokeRequired )
 27             {
 28                 MyInvoke inv = new MyInvoke(setProgress);
 29                 this.Invoke(inv, new Object[] { iValue }); 
 30             }
 31             else{
 32                 progressBar1.Value = (int)iValue;  
 33             }
 34         }
 35 
 36         public void setMaximum(object iValue)
 37         {
 38             if (progressBar1.InvokeRequired)
 39             {
 40                 MyInvoke inv = new MyInvoke(setMaximum);
 41                 this.Invoke(inv, new Object[] { iValue });
 42             }
 43             else
 44             {
 45                 progressBar1.Minimum = 0;
 46                 progressBar1.Maximum = (int)iValue;
 47                 progressBar1.Value = 0;
 48             }
 49         }
 50 
 51         public void EnableButton(object iValue)
 52         {
 53             if (button1.InvokeRequired)
 54             {
 55                 MyInvoke inv = new MyInvoke(EnableButton);
 56                 this.Invoke(inv, new Object[] { iValue });
 57             }
 58             else
 59             {
 60                 button1.Enabled = (bool)iValue;
 61             }
 62         }
 63 
 64 
 65         public void DoWork(object thObj) 
 66         {
 67             ResizeMethod((string)thObj);
 68             EnableButton(true);
 69 
 70             string str = string.Format("共转换完成图片{0}个!", progressBar1.Maximum);
 71 
 72             MessageBox.Show(str); 
 73         }
 74 
 75 
 76      
 77 
 78         private void button1_Click(object sender, EventArgs e)
 79         {
 80             FolderBrowserDialog dlg = new FolderBrowserDialog();
 81             if( dlg.ShowDialog() == DialogResult.OK ) 
 82             {
 83                 string strPath = dlg.SelectedPath;
 84                 Thread thread = new Thread(new ParameterizedThreadStart(DoWork));
 85                 thread.Start(strPath);               
 86             }
 87             
 88         }
 89 
 90         private void ResizeMethod(string strPath)
 91         {
 92             string[] strFiles = Directory.GetFiles(strPath, "*.jpg", SearchOption.TopDirectoryOnly);
 93 
 94 
 95 
 96             setMaximum( strFiles.Length );
 97             EnableButton(false);
 98             int iCount = 0; 
 99             
100 
101             foreach (string ss in strFiles)
102             {
103                 try
104                 {
105                     var img = Image.FromFile(ss);
106 
107 
108                     double blk = (img.Width + 0.0) / 1024.0;
109 
110                     int newHeight = (int)(img.Height / blk);
111 
112                     Bitmap tempBitmap = new Bitmap(1024, newHeight);
113 
114                     Graphics gTempBitmap = System.Drawing.Graphics.FromImage(tempBitmap);
115 
116                     gTempBitmap.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
117                     gTempBitmap.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
118                     gTempBitmap.Clear(Color.White);
119 
120 
121                     gTempBitmap.DrawImage(img, new Rectangle(0, 0, 1024, newHeight), new Rectangle(0, 0, img.Width, img.Height),
122                              GraphicsUnit.Pixel);
123 
124 
125                     tempBitmap.Save(@"d:\img\" + Path.GetFileName(ss));
126 
127                     gTempBitmap.Dispose();
128                     img.Dispose();
129                     tempBitmap.Dispose();
130 
131                     
132                     if( iCount % 10 ==  0 )
133                     {
134                         GC.Collect();
135                     }
136 
137 
138                 }
139                 catch (System.Exception e1)
140                 {
141                     MessageBox.Show(e1.Message);
142                 }
143                 finally
144                 {
145                     iCount++;
146                     setProgress(iCount); 
147                 }
148 
149             }
150         }
151     }
152 }

 

posted @ 2013-10-28 13:31  探索无止境  阅读(294)  评论(0编辑  收藏  举报