[C#]生成缩略图

        /// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="sourceImagePath">原图片路径(绝对路径)</param>
        /// <param name="thumbnailImageWidth">缩略图的宽度(高度与按源图片比例自动生成)</param>
        public Image ToThumbnailImages(string sourceImagePath, int thumbnailImageWidth)
        {
            Image Retimage = null;

            string SourceImagePath = sourceImagePath;
            int ThumbnailImageWidth = thumbnailImageWidth;
            string sExt = SourceImagePath.Substring(SourceImagePath.LastIndexOf(".")).ToLower();
            //从 原图片 创建 Image 对象
            Stream FS = new FileStream(sourceImagePath, FileMode.Open);
            System.Drawing.Image image = System.Drawing.Image.FromStream(FS);
            FS.Close();
            //System.Drawing.Image image = System.Drawing.Image.FromFile(sourceImagePath);
            int num = ((ThumbnailImageWidth / 4) * 3);
            int width = image.Width;
            int height = image.Height;
            //计算图片的比例
            if ((((double)width) / ((double)height)) >= 1.3333333333333333f)
            {
                num = ((height * ThumbnailImageWidth) / width);
            }
            else
            {
                ThumbnailImageWidth = ((width * num) / height);
            }
            if ((ThumbnailImageWidth < 1) || (num < 1))
            {
                return Retimage;
            }
            //用指定的大小和格式初始化 Bitmap 类的新实例
            Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num, PixelFormat.Format32bppArgb);
            //从指定的 Image 对象创建新 Graphics 对象
            Graphics graphics = Graphics.FromImage(bitmap);
            //清除整个绘图面并以透明背景色填充
            graphics.Clear(Color.Transparent);
            //在指定位置并且按指定大小绘制 原图片 对象
            graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));
            Retimage = image.Clone() as Image;
            image.Dispose();
            bitmap.Dispose();
            graphics.Dispose();

            return Retimage;
        }

posted on 2010-05-10 09:36  BoneKing  阅读(205)  评论(0编辑  收藏  举报