首页 国内 国际 娱乐 体育 财经 科技 留学 健康 论坛 空间 汽车 文学 军事 爱墙 游戏 艺术 星座
短信 明星 数码 手机 美食 家居 股票 教育 公益 公益 旅游 彩票 商城 校园 奇闻 女性 房产 时尚

图片无损缩放类(小弟初学,到低有没有损耗,还需高人指点)

using System;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace ZHT.Utility.Share
{
public class Thumbnail
{
   
public Thumbnail()
   {
   
   }   

   
/// <SUMMARY>
   
/// 图片缩放
   
/// </SUMMARY>
   
/// <PARAM name="sourceFile">图片源路径</PARAM>
   
/// <PARAM name="destFile">缩放后图片输出路径</PARAM>
   
/// <PARAM name="destHeight">缩放后图片高度</PARAM>
   
/// <PARAM name="destWidth">缩放后图片宽度</PARAM>
   
/// <RETURNS></RETURNS>
        public static bool GetThumbnail(string sourceFile, string destFile, int destHeight, int destWidth)
        {
            System.Drawing.Image imgSource 
= System.Drawing.Image.FromFile(sourceFile);
            System.Drawing.Imaging.ImageFormat thisFormat 
= imgSource.RawFormat;
    
int sW = 0, sH = 0
            
// 按比例缩放
            int sWidth = imgSource.Width;
            
int sHeight = imgSource.Height;

    
if(sHeight>destHeight || sWidth>destWidth)
    {
     
if((sWidth*destHeight)>(sHeight*destWidth))
     {
      sW 
= destWidth;
      sH 
= (destWidth*sHeight)/sWidth;
     }
     
else
     {
      sH 
= destHeight;
      sW 
= (sWidth*destHeight)/sHeight;
     }
    }
    
else
    {
     sW 
= sWidth;
     sH 
= sHeight;
    }

            Bitmap outBmp 
= new Bitmap(destWidth, destHeight);
            Graphics g 
= Graphics.FromImage(outBmp);
    g.Clear(Color.WhiteSmoke);

            
// 设置画布的描绘质量
            g.CompositingQuality = CompositingQuality.HighQuality; 
            g.SmoothingMode 
= SmoothingMode.HighQuality; 
            g.InterpolationMode 
= InterpolationMode.HighQualityBicubic;

            g.DrawImage(imgSource, 
new Rectangle((destWidth-sW)/2,(destHeight-sH)/2, sW, sH),0,0, imgSource.Width, imgSource.Height, GraphicsUnit.Pixel);
            g.Dispose();

            
// 以下代码为保存图片时,设置压缩质量
            EncoderParameters encoderParams = new EncoderParameters();
            
long[] quality = new long[1];
            quality[
0= 100;

            EncoderParameter encoderParam 
= new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
            encoderParams.Param[
0= encoderParam;

            
try
            {
                
//获得包含有关内置图像编码解码器的信息的ImageCodecInfo 对象。
                ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
                ImageCodecInfo jpegICI 
= null;
                
for (int x = 0; x < arrayICI.Length; x++)
                {
                    
if (arrayICI[x].FormatDescription.Equals("JPEG"))
                    {
                        jpegICI 
= arrayICI[x];//设置JPEG编码
                        break;
                    }
                }

                
if (jpegICI != null)
                {
                    outBmp.Save(destFile, jpegICI, encoderParams);
                }
                
else
                {
                    outBmp.Save(destFile, thisFormat);
                }

                
return true;
            }
            
catch
            {
                
return false;
            }
            
finally
            {
                imgSource.Dispose();
                outBmp.Dispose();
            }
        }
}
}
posted @ 2009-03-03 09:34  程序执着追随者  阅读(766)  评论(0编辑  收藏  举报
友情链接
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置
你的位置