首页 新闻 会员 周边

C# 请问这个生成简单缩略图的方法有什么问题?

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-14 15:35

先把问题说一下再贴代码,我要实现一个按比例生成缩略图的方法,也实现了,但是在生成的缩略图中,有部分生成出来是正常的,但是有部分生成出来的质量相当差,很模糊,虽然也是按比例生成的,我也将生成的图片长宽都手动计算并与原图核对了一下。。比例完全正常,但图像质量真的很差,请大家帮我看下这段代码有什么问题,谢谢了!

 

我用来测试的原图分辨率是2592*1456

 

代码如下:

private static bool BuildThumbnail(string sourceFile, string destFile, int width, int height)
        {
            System.Drawing.Image.GetThumbnailImageAbort myCallBack = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallBack);//提供一个回调方法,用于决定获取缩略图的方法在何时提前取消执行。

            Bitmap bmp = new Bitmap(sourceFile);
            try
            {
                if (bmp.Width > bmp.Height)//计算等比例缩放的宽高,原图中2者中较大的值来计算
                {
                    height = bmp.Height * width / bmp.Width;
                }
                else
                {
                    width = bmp.Width * height / bmp.Height;
                }

                System.Drawing.Image thumbnail = bmp.GetThumbnailImage(width, height, myCallBack, IntPtr.Zero);//检索图片中是否包含缩略图,如果不包含,就按比例缩放来生成一个缩略图。
                string destPath = Path.GetFullPath(destFile);
                if (!Directory.Exists(destPath))
                {
                    Directory.CreateDirectory(destPath);
                }
                thumbnail.Save(destFile);//将图像保存到指定path中。
                return true;
            }
            catch (Exception ex)
            {
                Utility.Logger.Error("生成缩略图时错误:" + ex.Message);
                return false;
            }
            finally
            {
                bmp.Dispose();
            }
        }

        private static bool ThumbnailCallBack()//CreateThumbnail方法需要调用这个方法。
        {
            return false;
        }
hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2014-10-12 15:10
< >
分享
最佳答案
0

我想会不会是整除的问题?计算缩放的地方。由于你用的是取整,可能导致宽高比没有达到你所需要的等比。

收获园豆:10
幻天芒 | 高人七级 |园豆:37175 | 2014-10-12 17:10

取整影响不会太大,计算出来的结果差就在0.几px,不到1,

bmp.GetThumbnailImage(width, height, myCallBack, IntPtr.Zero);

这个方法是.net自带的,所以不知道是哪的问题。。

hexllo | 园豆:318 (菜鸟二级) | 2014-10-13 15:07

@hexllo: 你的缩略图那么小?取整居然只有那么点差距?贴缩略图尺寸吧。

幻天芒 | 园豆:37175 (高人七级) | 2014-10-14 11:19

@幻天芒: 

原图像素是:2592X1456

缩略图像素是:770X433

2592/1456=1.780

770/433=1.778

它们的长宽比只相差很少(1.780-1.778=0.002),不应该变模糊啊。。

hexllo | 园豆:318 (菜鸟二级) | 2014-10-14 14:41

@hexllo: 搜到一个方案,你看看:http://blog.sina.com.cn/s/blog_6154bf970100ot9r.html

幻天芒 | 园豆:37175 (高人七级) | 2014-10-14 15:25
其他回答(2)
0

我是新手都知道,这段代码,跟生成缩略图一点关系都没有!缩略图生成应该在是GetThumbnailImage()里面

时光刺客 | 园豆:60 (初学一级) | 2014-10-12 21:02

bmp.GetThumbnailImage(width, height, myCallBack, IntPtr.Zero);

这个方法是.net自带的,所以不知道是哪的问题。。

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-10-13 15:07
0

对于客户提出的不可验证的问题,或者信息量不足的,主观感觉太强烈的,我们处理的优先级都相当低。

类似你这种问题,你需要提供的是大图、小图,大图的尺寸(长和宽),小图的尺寸(长和宽)

提供一个你认为显示正常的图,一个你认为显示不正常的图。

这种信息比你的代码有用多了。

因为初学者通常的问题都是栽在这上面。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-13 09:58

哥们,发现你在回答问题前通常会写几句比较逗比,但又有道理的话。。。

我放个异常的图上来,请帮我看一下是怎么回事,图片得下下来才能测试,谢谢了

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2014-10-13 15:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册