標籤:
/// <summary> /// 高品質縮放圖片 /// </summary> /// <param name="OriginFilePath">源圖的路徑</param> /// <param name="TargetFilePath">儲存縮圖的路徑</param> /// <param name="DestWidth">縮放後圖片寬度</param> /// <param name="DestHeight">縮放後圖片高度</param> /// <returns>表明此次操作是否成功</returns> public static bool ToSuolue(System.IO.Stream oStream, string TargetFilePath, int towidth, int toheight) { //System.Drawing.Image OriginImage = System.Drawing.Image.FromFile(OriginFilePath); System.Drawing.Image OriginImage = System.Drawing.Image.FromStream(oStream); System.Drawing.Imaging.ImageFormat thisFormat = OriginImage.RawFormat; //按比例縮放 int x = 0, y = 0; int ow = OriginImage.Width; int oh = OriginImage.Height; if ((double)ow / (double)oh > (double)towidth / (double)toheight) { oh = OriginImage.Height; ow = OriginImage.Height * towidth / toheight; y = 0; x = (OriginImage.Width - ow) / 2; } else { ow = OriginImage.Width; oh = OriginImage.Width * toheight / towidth; x = 0; y = (OriginImage.Height - oh) / 2; } Bitmap bt = new Bitmap(towidth, toheight); //根據指定大小建立Bitmap執行個體 using (Graphics g = Graphics.FromImage(bt)) { g.Clear(Color.White); //設定畫布的描繪品質 g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.DrawImage(OriginImage, new Rectangle(0, 0, towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel); g.Dispose(); } System.Drawing.Imaging.EncoderParameters EncoderParams = new System.Drawing.Imaging.EncoderParameters(); //取得內建的編碼器 long[] Quality = new long[1]; Quality[0] = 100; System.Drawing.Imaging.EncoderParameter EncoderParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Quality); EncoderParams.Param[0] = EncoderParam; //try //{ //獲得包含有關內建映像編碼解碼器的資訊的ImageCodecInfo 對象 System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(); System.Drawing.Imaging.ImageCodecInfo jpegICI = null; for (int i = 0; i < arrayICI.Length; i++) { if (arrayICI[i].FormatDescription.Equals("JPEG")) { jpegICI = arrayICI[i]; //設定為JPEG編碼方式 break; } } if (jpegICI != null) //儲存縮圖 { bt.Save(TargetFilePath, jpegICI, EncoderParams); } else { bt.Save(TargetFilePath, thisFormat); } OriginImage.Dispose(); return true; //} //catch (System.Runtime.InteropServices.ExternalException e1) //GDI+發生一般錯誤 //{ // return false; //} //catch (Exception e2) //{ // return false; //} }
C#剪下產生高品質縮放圖片